func_code_string: #include <bits/stdc++.h>   using namespace std;   struct fenwickTree {     long long n;     vector<long long> bit;     fenwickTree() {}     fenwickTree(long long siz) : n(siz + 5), bit(siz + 5, 0) {}     void add(long long pos, long long upd) {       for (; pos < n; pos += pos & (-pos)) bit[pos] += upd;     }     long long sum(long long pos) {       long long ret = 0;       for (; pos; pos -= pos & (-pos)) ret += bit[pos];       return ret;     }     long long query(long long pos) {       return sum(n - 1) - sum(min(n - 1, pos - 1));     }   };   const long long nax = 100005;   long long c[nax], ss[nax] = {0}, dsu[nax], siz[nax] = {0}, ans[nax];   vector<long long> g[nax];   vector<pair<long long, long long>> q[nax];   vector<map<long long, long long>> mp(nax);   vector<fenwickTree> bitarr(nax);   void dfs(long long u, long long p) {     ss[u] = siz[u] = 1;     long long mx = -1, mxc = -1;     for (auto &k : g[u])       if (k != p) {         dfs(k, u);         ss[u] += ss[k];         if (ss[k] > mx) mx = ss[k], mxc = k;       }     if (mxc != -1) {       dsu[u] = dsu[mxc];       siz[dsu[mxc]] = ss[u];     }   }   void add(long long u, long long col, long long cnt) {     if (!cnt) return;     if (mp[u].count(col)) bitarr[u].add(mp[u][col], -1);     mp[u][col] += cnt;     bitarr[u].add(mp[u][col], 1);   }   void dfs2(long long u, long long p) {     for (auto &k : g[u])       if (k != p) dfs2(k, u);     add(dsu[u], c[u], 1);     for (auto &k : g[u])       if (k != p && dsu[k] != dsu[u])         for (auto &col : mp[dsu[k]]) add(dsu[u], col.first, col.second);     for (auto &qry : q[u]) ans[qry.first] = bitarr[dsu[u]].query(qry.second);   }   int32_t main() {     ios::sync_with_stdio(false);     cin.tie(0);     long long n, m;     cin >> n >> m;     for (long long i = 1; i <= n; i++) dsu[i] = i;     for (long long i = 1; i <= n; i++) cin >> c[i];     for (long long i = 0; i < n - 1; i++) {       long long u, v;       cin >> u >> v;       g[u].push_back(v);       g[v].push_back(u);     }     dfs(1, 1);     for (long long i = 1; i <= n; i++) bitarr[i] = fenwickTree(siz[i]);     for (long long i = 0; i < m; i++) {       long long a, b;       cin >> a >> b;       q[a].push_back({i + 1, b});     }     dfs2(1, 1);     for (long long i = 1; i <= m; i++) cout << ans[i] <<   n ;   }   