#include <bits/stdc++.h>
using namespace std;
int vis[100005];
int bit[100005];
struct qu {
  int l;
  int r;
  int id;
  int k;
};
int bs;
int cmp(struct qu a, struct qu b) {
  if (a.l / bs != b.l / bs) {
    return a.l / bs < b.l / bs;
  }
  return a.r < b.r;
}
struct qu arr[100005];
vector<int> adj[100005];
int col[100005];
int fa[100005];
pair<int, int> second[100005];
int pans[100005];
int fq[100005];
int N = 1e5 + 5;
void dfs(int u, int &id) {
  vis[u] = 1;
  int i;
  fa[++id] = col[u];
  second[u].first = id;
  for (i = 0; i < adj[u].size(); i++) {
    if (!vis[adj[u][i]]) {
      dfs(adj[u][i], id);
    }
  }
  second[u].second = id;
}
void upd(int id, int v) {
  while (id < N && id > 0) {
    bit[id] += v;
    id = id + (id & -id);
  }
}
int query(int id) {
  int s = 0;
  while (id > 0) {
    s += bit[id];
    id = id - (id & -id);
  }
  return s;
}
void add(int pos) {
  if (fq[fa[pos]]) {
    upd(fq[fa[pos]], -1);
  }
  fq[fa[pos]]++;
  upd(fq[fa[pos]], 1);
}
void rem(int pos) {
  if (fq[fa[pos]]) {
    upd(fq[fa[pos]], -1);
    fq[fa[pos]]--;
  }
  if (fq[fa[pos]]) {
    upd(fq[fa[pos]], 1);
  }
}
int main() {
  int n, m, u, v, i, j, k;
  scanf("%d", &n);
  scanf("%d", &m);
  bs = sqrt(n) + 1;
  for (i = 1; i <= n; i++) {
    scanf("%d", &col[i]);
  }
  for (i = 0; i < n - 1; i++) {
    scanf("%d", &u);
    scanf("%d", &v);
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  j = -1;
  dfs(1, j);
  for (i = 0; i < m; i++) {
    scanf("%d", &u);
    scanf("%d", &k);
    arr[i].l = second[u].first;
    arr[i].r = second[u].second;
    arr[i].id = i;
    arr[i].k = k;
  }
  sort(arr, arr + m, cmp);
  int cl = 0, cr = 0, ans = 0;
  for (i = 0; i < m; i++) {
    while (cl > arr[i].l) {
      add(cl - 1);
      cl--;
    }
    while (cr <= arr[i].r) {
      add(cr);
      cr++;
    }
    while (cl < arr[i].l) {
      rem(cl);
      cl++;
    }
    while (cr > arr[i].r + 1) {
      rem(cr - 1);
      cr--;
    }
    pans[arr[i].id] = query(N - 1) - query(arr[i].k - 1);
  }
  for (i = 0; i < m; i++) {
    printf("%d", pans[i]);
    ;
    printf("\n");
    ;
  }
  return 0;
}
