class UnionFind: def __init__(self, n): self._n = n self._parent = [-1] * n def _find(self, x): if self._parent[x] < 0: return x self._parent[x] = self._find(self._parent[x]) return self._parent[x] def union(self, x, y): x, y = self._find(x), self._find(y) if x == y: return if self._parent[y] < self._parent[x]: x, y = y, x self._parent[x] += self._parent[y] self._parent[y] = x def same(self, x, y): return self._find(x) == self._find(y) N, M = map(int, input().split()) E = [tuple(map(lambda x: int(x - 1), map(int, input().split()))) for _ in range(N - 1)] ST = [tuple(map(lambda x: int(x - 1), map(int, input().split()))) for _ in range(M)] ok = [0] * M ng = [N] * M for _ in range(15): idx = [[] for _ in range(N + 1)] for i in range(M): idx[(ok[i] + ng[i]) // 2].append(i) uf = UnionFind(N) for mid in range(N - 2, -1, -1): uf.union(*E[mid]) for i in idx[mid]: s, t = ST[i] if uf.same(s, t): ok[i] = mid else: ng[i] = mid ok.sort(reverse=True) for i in range(N - 1): while ok and ok[-1] == i: ok.pop() print(len(ok))