#include<bits/stdc++.h>
using namespace std;
int n,k,root,mx=-114514;
int fa[50001],son[50002];
int diff[50002],now[50001];
int tst[20][50001];
int dep[50001];
vector<int>vec[50001];
bitset<50001>b,bb;
void dfs1(int x,int dp){
dep[x]=dp;
for(int i:vec[x]){
if(b[i]==0){
b[i]=1;
fa[i]=x;
dfs1(i,dp+1);
}
}
}
void dfs2(int x){
now[x]=now[fa[x]]+diff[x];
for(int i:vec[x]){
if(bb[i]==0){
bb[i]=1;
dfs2(i);
}
}
}
int LCA(int x,int y){
if(dep[x]<dep[y])swap(x,y);
int k=dep[x]-dep[y];
for(int i=17;i>=0;i--){
if(k>=(1<<i)){
k-=(1<<i);
x=tst[i][x];
}
}
if(x==y)return x;
for(int i=17;i>=0;i--){
if(tst[i][x]&&tst[i][y]&&tst[i][x]!=tst[i][y]){
x=tst[i][x];
y=tst[i][y];
}
}
return fa[x];
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);
cin>>n>>k;
for(int i=1;i<=n-1;i++){
int u,v;
cin>>u>>v;
vec[u].push_back(v);
vec[v].push_back(u);
}
for(int i=1;i<=n;i++){
if(vec[i].size()==1){
root=i;
b[root]=bb[root]=1;
break;
}
}
dfs1(root,1);
for(int i=1;i<=n+1;i++)son[i]=50001;
for(int i=1;i<=n;i++){
son[fa[i]]=i;
}
for(int i=1;i<=n;i++)tst[0][i]=fa[i];
for(int i=1;i<=18;i++){
for(int q=1;q<=n;q++){
tst[i][q]=tst[i-1][tst[i-1][q]];
}
}
for(int i=1;i<=k;i++){
int si,ti;
cin>>si>>ti;
int L=LCA(si,ti);
if(L==si){
diff[si]++;
diff[son[ti]]--;
}
else if(L==ti){
diff[ti]++;
diff[son[si]]--;
}
else {
diff[L]++;
diff[son[si]]--;
diff[son[ti]]--;
}
}
dfs2(root);
for(int i=1;i<=n;i++){
mx=max(mx,now[i]);
}
cout<<mx;
}