求赞!
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=100010;
vector<ll> e[N];
ll n,m,a[N],d[N],p[25][N],cnt[N],ans;
void dfs1(ll u,ll fa) {
d[u]=d[fa]+1,p[0][u]=fa;
for(ll i=1; i<=20; ++i) p[i][u]=p[i-1][p[i-1][u]];
for(ll v:e[u]) if(v!=fa) dfs1(v,u);
}
ll lca(ll u,ll v) {
if(d[u]<d[v]) swap(u,v);
ll stp=d[u]-d[v];
for(ll i=20; i>=0; --i) if(stp>>i&1) u=p[i][u];
if(u==v) return u;
for(ll i=16; i>=0; --i) if(p[i][u]!=p[i][v]) u=p[i][u],v=p[i][v];
return p[0][u];
}
void dfs2(ll u,ll fa) {
for(ll v:e[u]) {
if(v==fa) continue;
dfs2(v,u);
cnt[u]+=cnt[v];
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(ll i=1,x,y; i<n; ++i) cin>>x>>y,e[x].push_back(y),e[y].push_back(x);
dfs1(1,0);
for(ll i=1,u,v; i<=m; ++i) {
cin>>u>>v;
++cnt[u],++cnt[v],cnt[lca(u,v)]-=2;
}
dfs2(1,0);
for(ll i=2; i<=n; ++i)
if(!cnt[i]) ans+=m;
else if(cnt[i]==1) ++ans;
cout<<ans;
return 0;
}