#include <bits/stdc++.h>
#define rep(i, a, b) for(int i = (a); i <= (b); i++)
#define pre(i, a, b) for(int i = (a); i >= (b); i--)
#define Ede(i, u) for(int i = h[u]; i; i = ne[i])
#define go(i, a) for(auto i : a)
//#define int long long
#define LL long long
#define ULL unsigned long long
#define PII pair<int, int>
#define PIL pair<int, long long>
#define PLI pair<long long, int>
#define PLL pair<long long, long long>
#define mp make_pair
#define eb emplace_back
#define opb pop_back
#define pb push_back
#define pf push_front
#define fi first
#define se second
#define sf scanf
#define prf printf
#define el putchar('\n')
#define mms(arr, n) memset(arr, n, sizeof(arr))
#define mmc(arr1, arr2) memcpy(arr1, arr2, sizeof(arr2))
#define Db(x) prf("test(%s): ", x)
const int inf = 0x3f3f3f3f;
template <typename T> inline void rd(T &x){
x = 0; bool f = true; char ch = getchar();
while(ch < '0' || ch > '9'){ if(ch == '-') f = false; ch = getchar();}
while(ch >= '0' && ch <= '9'){ x = (x << 1) + (x << 3) + (ch ^ '0'); ch = getchar();}
if(!f) x = -x;
}
template <typename T, typename ...Args> inline void rd(T &x, Args &...args){ rd(x); rd(args...);}
using namespace std;
const int N = 5e4 + 10, M = 20;
int n, m;
int h[N], e[N << 1], ne[N << 1], idx;
void add(int a, int b){
e[++idx] = b, ne[idx] = h[a], h[a] = idx;
}
int fa[N][M], dep[N];
void dfs(int u, int f){
fa[u][0] = f, dep[u] = dep[f] + 1;
rep(i, 1, M - 1) fa[u][i] = fa[fa[u][i - 1]][i - 1];
Ede(i, u){
int v = e[i];
if(v != f) dfs(v, u);
}
}
int LCA(int x, int y){
if(dep[x] > dep[y]) swap(x, y);
pre(i, M - 1, 0) if(dep[fa[y][i]] >= dep[x]) y = fa[y][i];
if(x == y) return x;
pre(i, M - 1, 0)
if(fa[x][i] != fa[y][i]) x = fa[x][i], y = fa[y][i];
return fa[x][0];
}
int force[N];
int main(){
/*
freopen(".in", "r", stdin);
freopen(".out", "w", stdout);
*/
rd(n, m);
rep(i, 1, n - 1){
int x, y; rd(x, y);
add(x, y), add(y, x);
}
dfs(1, 0);
rep(i, 1, m){
int x, y; rd(x, y);
int lca = LCA(x, y);
force[lca]--; //容斥
do{
force[x]++, x = fa[x][0];
}while(x != fa[lca][0]);
do{
force[y]++, y = fa[y][0];
}while(y != fa[lca][0]);
}
int maxa = 0;
rep(i, 1, n) maxa = max(maxa, force[i]);
prf("%d\n", maxa);
return 0;
}