#include #include using namespace std; using namespace atcoder; #define int long long int N,M; int INF = 1e9; signed main(){ cin>>N>>M; vector> edge(N-1); for(int i = 0; i < N - 1; i++){ cin>>edge[i].first>>edge[i].second; edge[i].first--; edge[i].second--; } vector S(M); vector T(M); for(int i = 0; i < M; i++){ cin>>S[i]>>T[i]; S[i]--; T[i]--; } dsu d(N); vector ans(N-1); vector hantei(M); ans[0] = M; for(int i = N - 2; i >= 0; i--){ d.merge(edge[i].first,edge[i].second); for(int j = 0; j < M; j++){ if(!hantei[j] && d.same(S[j],T[j])){ ans[i]--; hantei[j] = true; } } } for(int i = 1; i < N-1; i++) ans[i] += ans[i-1]; for(int i = 0; i < N-1; i++) cout << ans[i] << "\n"; }