class UnionFind: def __init__(self,n): self.n = n self.parent_size = [-1]*n self.group = [[i] for i in range(N)] def leader(self,a): if self.parent_size[a] < 0: return a self.parent_size[a] = self.leader(self.parent_size[a]) return self.parent_size[a] def merge(self,a,b): x, y = self.leader(a), self.leader(b) if x == y: return if abs(self.parent_size[x]) < abs(self.parent_size[y]): x, y = y, x self.parent_size[x] += self.parent_size[y] self.group[x] += self.group[y] self.parent_size[y] = x return def same(self,a,b): return self.leader(a) == self.leader(b) def size(self,a): return abs(self.parent_size[self.leader(a)]) def get_group(self, n): return self.group[self.leader(n)] N, M = map(int, input().split()) edge = [list(map(int, input().split())) for _ in range(N-1)] ST = [list(map(int, input().split())) for _ in range(M)] cnt = [[0]*N for _ in range(N)] for s, t in ST: s, t = s-1, t-1 cnt[s][t] += 1 UF = UnionFind(N) ans = [0] for u, v in edge[1:N-1][::-1]: ans.append(ans[-1]) u, v = u-1, v-1 for i in UF.get_group(u): for j in UF.get_group(v): ans[-1] += cnt[min(i, j)][max(i, j)] UF.merge(u, v) print(*ans[::-1], sep="\n")