#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 7;
int n, m, fa[N][35], dep[N], cf[N], ans;
vector<int> T[N];
void dfs(int u, int F){
dep[u] = dep[F] + 1;
for(int i = 1; i <= log2(dep[u]); i ++){
int v = fa[u][i - 1];
fa[u][i] = fa[v][i - 1];
}
for(int v : T[u]){
if(v == F) continue;
fa[v][0] = u;
dfs(v, u);
}
}
void cur(int u, int F){
for(int v : T[u]){
if(v == F) continue;
dfs(v, u);
cf[u] += cf[v];
}
}
int lca(int u, int v){
if(u == v) return u;
if(dep[u] < dep[v]) swap(u, v);
int d = dep[u] - dep[v];
for(int i = 0; i <= log2(d); i ++){
if(d >> i & 1){
u = fa[u][i];
}
}
if(u == v) return u;
for(int i = log2(dep[u]); i >= 0; i --){
if(fa[u][i] != fa[v][i]){
u = fa[u][i];
v = fa[v][i];
}
}
return fa[u][0];
}
void solve(){
cin >> n >> m;
for(int i = 1; i < n; i ++){
int u, v;
cin >> u >> v;
T[u].push_back(v);
T[v].push_back(u);
}
dfs(1, 0);
for(int i = 1; i <= m; i ++){
int u, v; cin >> u >> v;
cf[u] ++, cf[v] ++, cf[lca(u, v)] -= 2;
}
cur(1, 0);
for(int i = 2; i <= n; i ++){
if(cf[i] == 0){
ans += m;
}
else if(cf[i] == 1){
ans ++;
}
}
cout << ans;
}
signed main()
{
ios :: sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
solve();
return 0;
}
10pts 实在找不出错误来了,求调