#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--; } dsu d(N); vector E(N-1); for(int i = N - 2; i >= 0; i--){ d.merge(edge[i].first,edge[i].second); E[i] = d; } vector ans(N-1); ans[0] = M; for(int i = 0; i < M; i++){ int s,t; cin>>s>>t; s--; t--; int ok = 0; int ng = N-1; while(abs(ok - ng) > 1){ int mid = (ok + ng) / 2; if(E[mid].same(s,t)) ok = mid; else ng = mid; } ans[ok]--; } 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"; } }