#include <bits/stdc++.h>
#define el '\n'
#define fi first
#define sec second
#define pb push_back
#define int long long
#define pii pair<int,int>
#define sz(v) (int)(v).size()
#define all(v) (v).begin(),(v).end()
#define FOR(i, a, b) for(int i = (a), _b = (b); i <= _b; i++)
#define REP(i, a, b) for(int i = (a), _b = (b); i >= _b; i--)
using namespace std;
const int INF = 0x3f3f3f3f3f3f3f3f;
const int MAX_N = 2e5;
struct Query{
int l, r, k, id;
};
int freq[MAX_N + 5], cnt[MAX_N + 5], bacon[MAX_N + 5], ans[MAX_N + 5];
int tin[MAX_N + 5], tout[MAX_N + 5], pos[MAX_N + 5], timer;
vector<int> g[MAX_N + 5];
Query queries[MAX_N + 5];
pii tmp[MAX_N + 5];
int c[MAX_N + 5];
int Block, Vock;
int n, q;
bool cmp(const Query &x, const Query &y){
if((x.l / Block) != (y.l / Block)) return (x.l / Block) < (y.l / Block);
if((x.l / Block) & 1) return x.r < y.r;
return x.r > y.r;
}
void Input(){
cin >> n >> q;
Vock = max(1LL, (int)sqrt(n));
Block = max(1LL, (int)sqrt(q));
FOR(i, 1, n) cin >> c[i];
FOR(i, 1, n - 1){
int u, v;
cin >> u >> v;
g[u].pb(v);
g[v].pb(u);
}
FOR(i, 1, q) cin >> tmp[i].fi >> tmp[i].sec;
}
void dfs_euler(int u, int dad){
tin[u] = ++timer;
pos[timer] = u;
for(int v : g[u]) if(v != dad){
dfs_euler(v, u);
}
tout[u] = timer;
}
void Prepare(){
dfs_euler(1, 0);
FOR(i, 1, q){
int u = tmp[i].fi, k = tmp[i].sec;
queries[i] = {tin[u], tout[u], k, i};
}
sort(queries + 1, queries + q + 1, cmp);
}
void add(int x){
cnt[freq[x]]--;
bacon[freq[x] / Vock]--;
freq[x]++;
cnt[freq[x]]++;
bacon[freq[x] / Vock]++;
}
void remo(int x){
cnt[freq[x]]--;
bacon[freq[x] / Vock]--;
freq[x]--;
cnt[freq[x]]++;
bacon[freq[x] / Vock]++;
}
int get_ans(int k){
int res = 0, in_block = k / Vock;
REP(bucket, n / Vock, in_block + 1) res += bacon[bucket];
FOR(i, k, min(n, Vock * (in_block + 1) - 1)) res += cnt[i];
return res;
}
void Solve(){
int tl = 1, tr = 0;
FOR(i, 1, q){
int l = queries[i].l, r = queries[i].r;
int k = queries[i].k, id = queries[i].id;
while(l < tl) add(c[pos[--tl]]);
while(tr < r) add(c[pos[++tr]]);
while(tl < l) remo(c[pos[tl++]]);
while(r < tr) remo(c[pos[tr--]]);
ans[id] = get_ans(k);
}
FOR(i, 1, q) cout << ans[i] << el;
}
signed main(){
freopen("tree-random.inp", "r", stdin);
freopen("tree-random.out", "w", stdout);
ios_base::sync_with_stdio(0);
cin.tie(0);
Input();
Prepare();
Solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGVsICdcbicKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlYyBzZWNvbmQKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgcGlpIHBhaXI8aW50LGludD4KI2RlZmluZSBzeih2KSAoaW50KSh2KS5zaXplKCkKI2RlZmluZSBhbGwodikgKHYpLmJlZ2luKCksKHYpLmVuZCgpCiNkZWZpbmUgRk9SKGksIGEsIGIpIGZvcihpbnQgaSA9IChhKSwgX2IgPSAoYik7IGkgPD0gX2I7IGkrKykKI2RlZmluZSBSRVAoaSwgYSwgYikgZm9yKGludCBpID0gKGEpLCBfYiA9IChiKTsgaSA+PSBfYjsgaS0tKQoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBJTkYgPSAweDNmM2YzZjNmM2YzZjNmM2Y7CmNvbnN0IGludCBNQVhfTiA9IDJlNTsKCnN0cnVjdCBRdWVyeXsKICAgIGludCBsLCByLCBrLCBpZDsKfTsKCmludCBmcmVxW01BWF9OICsgNV0sIGNudFtNQVhfTiArIDVdLCBiYWNvbltNQVhfTiArIDVdLCBhbnNbTUFYX04gKyA1XTsKaW50IHRpbltNQVhfTiArIDVdLCB0b3V0W01BWF9OICsgNV0sIHBvc1tNQVhfTiArIDVdLCB0aW1lcjsKdmVjdG9yPGludD4gZ1tNQVhfTiArIDVdOwpRdWVyeSBxdWVyaWVzW01BWF9OICsgNV07CnBpaSB0bXBbTUFYX04gKyA1XTsKaW50IGNbTUFYX04gKyA1XTsKaW50IEJsb2NrLCBWb2NrOwppbnQgbiwgcTsKCmJvb2wgY21wKGNvbnN0IFF1ZXJ5ICZ4LCBjb25zdCBRdWVyeSAmeSl7CiAgICBpZigoeC5sIC8gQmxvY2spICE9ICh5LmwgLyBCbG9jaykpIHJldHVybiAoeC5sIC8gQmxvY2spIDwgKHkubCAvIEJsb2NrKTsKICAgIGlmKCh4LmwgLyBCbG9jaykgJiAxKSByZXR1cm4geC5yIDwgeS5yOwogICAgcmV0dXJuIHguciA+IHkucjsKfQoKdm9pZCBJbnB1dCgpewogICAgY2luID4+IG4gPj4gcTsKICAgIFZvY2sgPSBtYXgoMUxMLCAoaW50KXNxcnQobikpOwogICAgQmxvY2sgPSBtYXgoMUxMLCAoaW50KXNxcnQocSkpOwoKICAgIEZPUihpLCAxLCBuKSBjaW4gPj4gY1tpXTsKCiAgICBGT1IoaSwgMSwgbiAtIDEpewogICAgICAgIGludCB1LCB2OwogICAgICAgIGNpbiA+PiB1ID4+IHY7CgogICAgICAgIGdbdV0ucGIodik7CiAgICAgICAgZ1t2XS5wYih1KTsKICAgIH0KCiAgICBGT1IoaSwgMSwgcSkgY2luID4+IHRtcFtpXS5maSA+PiB0bXBbaV0uc2VjOwp9Cgp2b2lkIGRmc19ldWxlcihpbnQgdSwgaW50IGRhZCl7CiAgICB0aW5bdV0gPSArK3RpbWVyOwogICAgcG9zW3RpbWVyXSA9IHU7CgogICAgZm9yKGludCB2IDogZ1t1XSkgaWYodiAhPSBkYWQpewogICAgICAgIGRmc19ldWxlcih2LCB1KTsKICAgIH0KCiAgICB0b3V0W3VdID0gdGltZXI7Cn0KCnZvaWQgUHJlcGFyZSgpewogICAgZGZzX2V1bGVyKDEsIDApOwoKICAgIEZPUihpLCAxLCBxKXsKICAgICAgICBpbnQgdSA9IHRtcFtpXS5maSwgayA9IHRtcFtpXS5zZWM7CiAgICAgICAgcXVlcmllc1tpXSA9IHt0aW5bdV0sIHRvdXRbdV0sIGssIGl9OwogICAgfQogICAgc29ydChxdWVyaWVzICsgMSwgcXVlcmllcyArIHEgKyAxLCBjbXApOwp9Cgp2b2lkIGFkZChpbnQgeCl7CiAgICBjbnRbZnJlcVt4XV0tLTsKICAgIGJhY29uW2ZyZXFbeF0gLyBWb2NrXS0tOwoKICAgIGZyZXFbeF0rKzsKCiAgICBjbnRbZnJlcVt4XV0rKzsKICAgIGJhY29uW2ZyZXFbeF0gLyBWb2NrXSsrOwp9Cgp2b2lkIHJlbW8oaW50IHgpewogICAgY250W2ZyZXFbeF1dLS07CiAgICBiYWNvbltmcmVxW3hdIC8gVm9ja10tLTsKCiAgICBmcmVxW3hdLS07CgogICAgY250W2ZyZXFbeF1dKys7CiAgICBiYWNvbltmcmVxW3hdIC8gVm9ja10rKzsKfQoKaW50IGdldF9hbnMoaW50IGspewogICAgaW50IHJlcyA9IDAsIGluX2Jsb2NrID0gayAvIFZvY2s7CiAgICBSRVAoYnVja2V0LCBuIC8gVm9jaywgaW5fYmxvY2sgKyAxKSByZXMgKz0gYmFjb25bYnVja2V0XTsKICAgIEZPUihpLCBrLCBtaW4obiwgVm9jayAqIChpbl9ibG9jayArIDEpIC0gMSkpIHJlcyArPSBjbnRbaV07CiAgICByZXR1cm4gcmVzOwp9Cgp2b2lkIFNvbHZlKCl7CiAgICBpbnQgdGwgPSAxLCB0ciA9IDA7CiAgICBGT1IoaSwgMSwgcSl7CiAgICAgICAgaW50IGwgPSBxdWVyaWVzW2ldLmwsIHIgPSBxdWVyaWVzW2ldLnI7CiAgICAgICAgaW50IGsgPSBxdWVyaWVzW2ldLmssIGlkID0gcXVlcmllc1tpXS5pZDsKCiAgICAgICAgd2hpbGUobCA8IHRsKSBhZGQoY1twb3NbLS10bF1dKTsKICAgICAgICB3aGlsZSh0ciA8IHIpIGFkZChjW3Bvc1srK3RyXV0pOwogICAgICAgIHdoaWxlKHRsIDwgbCkgcmVtbyhjW3Bvc1t0bCsrXV0pOwogICAgICAgIHdoaWxlKHIgPCB0cikgcmVtbyhjW3Bvc1t0ci0tXV0pOwoKICAgICAgICBhbnNbaWRdID0gZ2V0X2FucyhrKTsKICAgIH0KICAgIEZPUihpLCAxLCBxKSBjb3V0IDw8IGFuc1tpXSA8PCBlbDsKfQoKc2lnbmVkIG1haW4oKXsKICAgIGZyZW9wZW4oInRyZWUtcmFuZG9tLmlucCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3BlbigidHJlZS1yYW5kb20ub3V0IiwgInciLCBzdGRvdXQpOwogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CgogICAgSW5wdXQoKTsKICAgIFByZXBhcmUoKTsKICAgIFNvbHZlKCk7CgogICAgcmV0dXJuIDA7Cn0K