#include <iostream>
#include <string>
#include <vector>
#include <queue>
#include <cmath>
#include <utility>
#include <unordered_map>
#include <set>
#include <map>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define ll long long
#define p1 first
#define p2 second
#define pii pair<int,int>
#define MAXINT (1 << 30)
#define MAXLL (1LL << 60)
using namespace std;
using namespace __gnu_pbds;
struct cmp {
bool operator()(pii const a, pii const b) const {
if (a.p1 == b.p1) return a.p2 < b.p2;
else return a.p1 < b.p1;
}
};
typedef tree<pii, null_type, cmp, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
/*
Data Structures: Range Trees, Trees.
Algorithms: DFS.
Time Complexity: O(nlog^2(n))
*/
vector<vector<int>> edges;
vector<int> val;
vector<int> in;
vector<int> out;
vector<ordered_set> rt;
int marker = 0;
int n;
int sz;
int marker1 = 0;
void dfs(int i, int p) {
in[i] = ++marker;
for (int u : edges[i]) {
if (p == u) continue; // skip parent
dfs(u, i);
}
out[i] = marker;
}
void buildTree(int p, int item, int l = 1, int r = n, int i = 1) {
rt[i].insert({item, ++marker1});
if (l != r) {
int m = (l + r) >> 1;
if (in[p] <= m) buildTree(p, item, l, m, i << 1);
else buildTree(p, item, m + 1, r, i << 1 | 1);
}
}
int qTree(int p, int item, int l = 1, int r = n, int i = 1) {
if (r < in[p]) return 0;
else if (in[p] <= l && r <= out[p]) {
return rt[i].order_of_key({item,0});
}
int sum = 0;
if (l != r) {
int m = (l + r) >> 1;
sum += qTree(p,item, l, m, i << 1);
sum += qTree(p,item, m + 1, r, i << 1 | 1);
}
return sum;
}
int main() {
int q, u, v;
scanf("%d %d", &n, &q);
val.resize(n);
in.resize(n);
out.resize(n);
edges.resize(n);
int sz = 2 << (int)ceil(log(n) / log(2));
rt.resize(sz);
for (int i = 0; i < n; i++) {
scanf("%d", &v);
val[i] = v;
}
for (int i = 0; i < n - 1; i++) {
scanf("%d %d", &u, &v);
edges[u].push_back(v);
edges[v].push_back(u);
}
dfs(0, -1);
for (int i = 0; i < n; i++) {
buildTree(i, val[i]);
}
int nd; int s;
for (int i = 0; i < q; i++) {
scanf("%d %d", &nd, &s);
if (s == 0) printf("0\n");
else printf("%d\n", qTree(nd, s));
buildTree(nd, s);
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxjbWF0aD4KI2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8bWFwPgoKI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcDEgZmlyc3QKI2RlZmluZSBwMiBzZWNvbmQKI2RlZmluZSBwaWkgcGFpcjxpbnQsaW50PgojZGVmaW5lIE1BWElOVCAoMSA8PCAzMCkKI2RlZmluZSBNQVhMTCAoMUxMIDw8IDYwKQp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKCnN0cnVjdCBjbXAgewogICAgYm9vbCBvcGVyYXRvcigpKHBpaSBjb25zdCBhLCBwaWkgY29uc3QgYikgY29uc3QgewogICAgICAgIGlmIChhLnAxID09IGIucDEpIHJldHVybiBhLnAyIDwgYi5wMjsKICAgICAgICBlbHNlIHJldHVybiBhLnAxIDwgYi5wMTsKICAgIH0KfTsKCgp0eXBlZGVmIHRyZWU8cGlpLCBudWxsX3R5cGUsIGNtcCwgcmJfdHJlZV90YWcsICB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+IG9yZGVyZWRfc2V0OwoKLyogIAoJRGF0YSBTdHJ1Y3R1cmVzOiBSYW5nZSBUcmVlcywgVHJlZXMuCglBbGdvcml0aG1zOiBERlMuCgoJVGltZSBDb21wbGV4aXR5OiBPKG5sb2deMihuKSkKKi8KCnZlY3Rvcjx2ZWN0b3I8aW50Pj4gZWRnZXM7CnZlY3RvcjxpbnQ+IHZhbDsKdmVjdG9yPGludD4gaW47CnZlY3RvcjxpbnQ+IG91dDsKdmVjdG9yPG9yZGVyZWRfc2V0PiBydDsKaW50IG1hcmtlciA9IDA7CmludCBuOwppbnQgc3o7CmludCBtYXJrZXIxID0gMDsKCnZvaWQgZGZzKGludCBpLCBpbnQgcCkgewoJaW5baV0gPSArK21hcmtlcjsKCWZvciAoaW50IHUgOiBlZGdlc1tpXSkgewoJCWlmIChwID09IHUpIGNvbnRpbnVlOyAvLyBza2lwIHBhcmVudAoJCWRmcyh1LCBpKTsKCX0KCW91dFtpXSA9IG1hcmtlcjsKfQoKdm9pZCBidWlsZFRyZWUoaW50IHAsIGludCBpdGVtLCBpbnQgbCA9IDEsIGludCByID0gbiwgaW50IGkgPSAxKSB7CglydFtpXS5pbnNlcnQoe2l0ZW0sICsrbWFya2VyMX0pOwoJaWYgKGwgIT0gcikgewoJCWludCBtID0gKGwgKyByKSA+PiAxOwoJCWlmIChpbltwXSA8PSBtKSBidWlsZFRyZWUocCwgaXRlbSwgbCwgbSwgaSA8PCAxKTsKCQllbHNlIGJ1aWxkVHJlZShwLCBpdGVtLCBtICsgMSwgciwgaSA8PCAxIHwgMSk7Cgl9Cn0KCmludCBxVHJlZShpbnQgcCwgaW50IGl0ZW0sIGludCBsID0gMSwgaW50IHIgPSBuLCBpbnQgaSA9IDEpIHsKCWlmIChyIDwgaW5bcF0pIHJldHVybiAwOwoJZWxzZSBpZiAoaW5bcF0gPD0gbCAmJiByIDw9IG91dFtwXSkgewoJCXJldHVybiBydFtpXS5vcmRlcl9vZl9rZXkoe2l0ZW0sMH0pOwoJfQoJaW50IHN1bSA9IDA7CglpZiAobCAhPSByKSB7CgkJaW50IG0gPSAobCArIHIpID4+IDE7CgkJc3VtICs9IHFUcmVlKHAsaXRlbSwgbCwgbSwgaSA8PCAxKTsKCQlzdW0gKz0gcVRyZWUocCxpdGVtLCBtICsgMSwgciwgaSA8PCAxIHwgMSk7Cgl9CgoJcmV0dXJuIHN1bTsKfQppbnQgbWFpbigpIHsKCWludCBxLCB1LCB2OwoJc2NhbmYoIiVkICVkIiwgJm4sICZxKTsKCXZhbC5yZXNpemUobik7Cglpbi5yZXNpemUobik7CglvdXQucmVzaXplKG4pOwoJZWRnZXMucmVzaXplKG4pOwoKCWludCBzeiA9IDIgPDwgKGludCljZWlsKGxvZyhuKSAvIGxvZygyKSk7CglydC5yZXNpemUoc3opOwoKCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CgkJc2NhbmYoIiVkIiwgJnYpOwoJCXZhbFtpXSA9IHY7Cgl9CgoJZm9yIChpbnQgaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7CgkJc2NhbmYoIiVkICVkIiwgJnUsICZ2KTsKCQllZGdlc1t1XS5wdXNoX2JhY2sodik7CgkJZWRnZXNbdl0ucHVzaF9iYWNrKHUpOwoJfQoJZGZzKDAsIC0xKTsKCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CgkJYnVpbGRUcmVlKGksIHZhbFtpXSk7Cgl9CglpbnQgbmQ7IGludCBzOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBxOyBpKyspIHsKCQlzY2FuZigiJWQgJWQiLCAmbmQsICZzKTsKICAgICAgICBpZiAocyA9PSAwKSBwcmludGYoIjBcbiIpOwoJCWVsc2UgcHJpbnRmKCIlZFxuIiwgcVRyZWUobmQsIHMpKTsKCQlidWlsZFRyZWUobmQsIHMpOwoJfQp9