rt
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long l;
l n, k, x, y, d[50005], p[50005][20], diff[50005], a[50005];
vector<l> v[50005];
void dfs(l x, l dad) {
d[x] = d[dad] + 1;
p[x][0] = dad;
for (l i(1); (1 << (i - 1)) <= d[x]; ++i) {
p[x][i] = p[p[x][i - 1]][i - 1];
}
for (l y : v[x]) {
if (y != dad) {
dfs(y, x);
}
}
}
l lca(l x, l y) {
if (d[x] < d[y]) swap(x, y);
for (l i(16); i >= 0; --i) {
if (d[p[x][i]] >= d[y]) {
x = p[x][i];
}
}
if (x == y) return x;
for (l i(16); i >= 0; --i) {
if (p[x][i] != p[y][i]) {
x = p[x][i];
y = p[y][i];
}
}
return p[x][0];
}
void dfs2(l x, l dad) {
for (l y : v[x]) {
if (y == dad) continue;
dfs2(y, x);
a[x] += a[y];
}
a[x] += diff[x];
}
int main() {
scanf("%lld%lld", &n, &k);
for (l i(1); i <= n; ++i) {
scanf("%lld%lld", &x, &y);
v[x].push_back(y);
v[y].push_back(x);
}
dfs(1, 0);
while (--k > -1) {
scanf("%lld%lld", &x, &y);
l z(lca(x, y));
diff[x]++;
diff[p[z][0]]--;
diff[y]++;
diff[z]--;
}
dfs2(1, 0);
l ans(0);
for (l i(1); i <= n; ++i) {
ans = max(ans, a[i]);
}
printf("%lld", ans);
return 0;
}