#include #include using namespace std; int main() { cin.tie(0); cout.tie(0); ios::sync_with_stdio(false); int N, M; cin >> N >> M; vector u(N - 1), v(N - 1); for(int i = 0; i < N - 1; i++) { cin >> u[i] >> v[i]; --u[i]; --v[i]; } vector s(M), t(M); for(int i = 0; i < M; i++) { cin >> s[i] >> t[i]; --s[i]; --t[i]; } vector> C(N, vector(N)); for(int i = 0; i < M; i++) { C[s[i]][t[i]]++; C[t[i]][s[i]]++; } atcoder::dsu uf(N); vector> G(N); for(int i = 0; i < N; i++) { G[i].emplace_back(i); } int cnt = 0; vector ans(N); for(int i = N - 2; i >= 0; i--) { if(uf.same(u[i], v[i])) { ans[i] = cnt; continue; } int lu = uf.leader(u[i]); int lv = uf.leader(v[i]); for(int x : G[lu]) { for(int y : G[lv]) { cnt += C[x][y]; } } uf.merge(u[i], v[i]); int l = uf.leader(u[i]); if(l == lu) { for(int x : G[lv]) { G[l].emplace_back(x); } } else { for(int x : G[lu]) { G[l].emplace_back(x); } } ans[i] = cnt; } for(int i = 1; i < N; i++) { cout << ans[i] << '\n'; } return 0; }