// ROOT : DRAGON3012009
#include <bits/stdc++.h>
#define ll int
#define ld long double
#define el "\n"
#define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define __ROOT__ int main()
#pragma GCC optimize("O2")
#define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
#define FORD(i,r,l) for(int i = r ; i >= l ; i --)
#define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
#define fi first
#define se second
#define M 1000000007
#define MAXN 80001
#define INF (1ll<<30)
#define BLOCK_SIZE 800
#define MAX_NODE 1001001
#define LOG 19
#define ALPHA_SIZE 26
#define BASE 311
#define NAME "file"
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
using namespace std;
const ll MOD[] = {(ll)1e9 + 2277, (ll)1e9 + 5277, (ll)1e9 + 8277, (ll)1e9 + 9277, (ll) 1e9 + 7 };
const ll NMOD = 1;
const int dx[] = {-1, 0, 1,0};
const int dy[] = {0, 1, 0, -1};
//**Variable**//
ll n, num_color = 0, que ;
ll c[MAXN];
ll high[MAXN] ;
ll deg[MAXN] ;
ll dis[MAXN / BLOCK_SIZE][MAXN] ;
vector<ll> adj[MAXN] ;
vector<ll> color[MAXN] ;
bool heavy[MAXN] ;
vector<ll> cpr;
unordered_map<ll,ll> mp ;
// For LCA with RMQ
vector<int> euler, depth, first(MAXN);
int st[LOG+1][2 * MAXN];
int lg[2 * MAXN];
//**Function**//
template<class X, class Y >
bool minimize(X & x, const Y &y ) { return x > y ? x = y, 1:0 ; }
template<class X, class Y >
bool maximize(X &x, const Y &y ) { return x < y ? x = y, 1:0 ; }
void dfs_euler(int u, int p, int d) {
first[u] = euler.size();
euler.push_back(u);
depth.push_back(d);
for (int v : adj[u]) if (v != p) {
dfs_euler(v, u, d + 1);
euler.push_back(u);
depth.push_back(d);
}
}
void build_sparse() {
int m = euler.size();
for (int i = 0; i < m; ++i) st[0][i] = i;
for (int i = 2; i <= m; ++i) lg[i] = lg[i / 2] + 1;
for (int k = 1; (1 << k) <= m; ++k) {
for (int i = 0; i + (1 << k) <= m; ++i) {
int x = st[k - 1][i];
int y = st[k - 1][i + (1 << (k - 1))];
st[k][i] = (depth[x] < depth[y] ? x : y);
}
}
}
int LCA(int u, int v) {
int L = first[u], R = first[v];
if (L > R) swap(L, R);
int k = lg[R - L + 1];
int x = st[k][L], y = st[k][R - (1 << k) + 1];
return (depth[x] < depth[y]) ? euler[x] : euler[y];
}
ll dist(ll u, ll v) {
return depth[first[u]] + depth[first[v]] - 2 * depth[first[LCA(u, v)]];
}
void bfs(ll co) {
queue<ll> q ;
for(ll v : color[co ]) {
dis[co][v] = 0 ;
q.push(v) ;
}
while(!q.empty()) {
ll u = q.front() ; q.pop() ;
for(ll v : adj[u]) {
if(dis[co][v] == 0 && v != u) {
dis[co][v] = dis[co][u] + 1 ;
q.push(v) ;
}
}
}
}
void init() {
cin>>n >> que ;
FOR(i,1, n) cin >> c[i], cpr.push_back(c[i]), mp[c[i]]++;
compare(cpr) ;
num_color = cpr.size() ;
FOR(i, 1,n) {
c[i] = lower_bound(cpr.begin(), cpr.end(), c[i]) - cpr.begin() + 1;
deg[c[i]] ++ ;
color[c[i]].push_back(i) ;
}
FOR(i, 1, n -1 ) {
ll x, y ; cin >> x>> y ;
adj[x].push_back(y) ;
adj[y].push_back(x) ;
}
// LCA preprocess
dfs_euler(1, 0, 0);
build_sparse();
FOR(i, 1, num_color) if(deg[i] >= BLOCK_SIZE ) bfs(i) ;
}
void solve() {
FOR(i, 1,que ) {
ll u, c ; cin >> u >> c ;
if(mp[c] == 0 ) {
cout << -1 << el ;
continue ;
}
c = lower_bound(cpr.begin(), cpr.end(), c ) - cpr.begin() + 1 ;
if(deg[c] >= BLOCK_SIZE) cout << dis[c][u] << el ;
else {
ll ans = INF ;
for(ll v : color[c]) minimize(ans, dist(u, v )) ;
cout << ans << el ;
}
}
}
__ROOT__ {
fast;
int t =1 ;
while(t-- ) {
init();
solve();
}
}
Ly8gUk9PVCA6IERSQUdPTjMwMTIwMDkKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgaW50CiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBlbCAiXG4iCiNkZWZpbmUgZmFzdCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKI2RlZmluZSBfX1JPT1RfXyBpbnQgbWFpbigpCiNwcmFnbWEgR0NDIG9wdGltaXplKCJPMiIpCiNkZWZpbmUgRk9SKGksbCxyKSBmb3IoaW50IGkgPSBsIDsgaSA8PSByIDsgaSArKykKI2RlZmluZSBGT1JEKGkscixsKSBmb3IoaW50IGkgPSByIDsgaSA+PSBsIDsgaSAtLSkKI2RlZmluZSBSRVAoaSwgYSApIGZvcihpbnQgaSA9IDAgOyBpIDwgYSA7IGkgKysgKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgTSAxMDAwMDAwMDA3CiNkZWZpbmUgTUFYTiA4MDAwMQojZGVmaW5lIElORiAoMWxsPDwzMCkKI2RlZmluZSBCTE9DS19TSVpFIDgwMAojZGVmaW5lIE1BWF9OT0RFIDEwMDEwMDEKI2RlZmluZSBMT0cgMTkKI2RlZmluZSBBTFBIQV9TSVpFIDI2CiNkZWZpbmUgQkFTRSAzMTEKI2RlZmluZSBOQU1FICJmaWxlIgojZGVmaW5lIGNvbXBhcmUodikgc29ydCgodikuYmVnaW4oKSwgKHYpLmVuZCgpKTsgKHYpLmVyYXNlKHVuaXF1ZSgodikuYmVnaW4oKSwgKHYpLmVuZCgpKSwgKHYpLmVuZCgpKTsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgbGwgTU9EW10gPSB7KGxsKTFlOSArIDIyNzcsIChsbCkxZTkgKyA1Mjc3LCAobGwpMWU5ICsgODI3NywgKGxsKTFlOSArIDkyNzcsIChsbCkgMWU5ICsgNyB9Owpjb25zdCBsbCBOTU9EID0gMTsKY29uc3QgaW50IGR4W10gPSB7LTEsIDAsIDEsMH07CmNvbnN0IGludCBkeVtdID0gezAsIDEsIDAsIC0xfTsKCi8vKipWYXJpYWJsZSoqLy8KbGwgbiwgbnVtX2NvbG9yID0gMCwgcXVlIDsKbGwgY1tNQVhOXTsKbGwgaGlnaFtNQVhOXSA7CmxsIGRlZ1tNQVhOXSA7CmxsIGRpc1tNQVhOIC8gQkxPQ0tfU0laRV1bTUFYTl0gOwp2ZWN0b3I8bGw+IGFkaltNQVhOXSA7CnZlY3RvcjxsbD4gY29sb3JbTUFYTl0gOwpib29sIGhlYXZ5W01BWE5dIDsKdmVjdG9yPGxsPiBjcHI7CnVub3JkZXJlZF9tYXA8bGwsbGw+IG1wIDsKCi8vIEZvciBMQ0Egd2l0aCBSTVEKdmVjdG9yPGludD4gZXVsZXIsIGRlcHRoLCBmaXJzdChNQVhOKTsKaW50IHN0W0xPRysxXVsyICogTUFYTl07CmludCBsZ1syICogTUFYTl07CgovLyoqRnVuY3Rpb24qKi8vCnRlbXBsYXRlPGNsYXNzIFgsIGNsYXNzIFkgPgpib29sIG1pbmltaXplKFggJiB4LCBjb25zdCBZICZ5ICkgeyByZXR1cm4geCA+IHkgPyB4ID0geSwgMTowIDsgfQp0ZW1wbGF0ZTxjbGFzcyBYLCBjbGFzcyBZID4KYm9vbCBtYXhpbWl6ZShYICZ4LCBjb25zdCBZICZ5ICkgeyByZXR1cm4geCA8IHkgPyB4ID0geSwgMTowIDsgfQoKdm9pZCBkZnNfZXVsZXIoaW50IHUsIGludCBwLCBpbnQgZCkgewogICAgZmlyc3RbdV0gPSBldWxlci5zaXplKCk7CiAgICBldWxlci5wdXNoX2JhY2sodSk7CiAgICBkZXB0aC5wdXNoX2JhY2soZCk7CiAgICBmb3IgKGludCB2IDogYWRqW3VdKSBpZiAodiAhPSBwKSB7CiAgICAgICAgZGZzX2V1bGVyKHYsIHUsIGQgKyAxKTsKICAgICAgICBldWxlci5wdXNoX2JhY2sodSk7CiAgICAgICAgZGVwdGgucHVzaF9iYWNrKGQpOwogICAgfQp9Cgp2b2lkIGJ1aWxkX3NwYXJzZSgpIHsKICAgIGludCBtID0gZXVsZXIuc2l6ZSgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyArK2kpIHN0WzBdW2ldID0gaTsKICAgIGZvciAoaW50IGkgPSAyOyBpIDw9IG07ICsraSkgbGdbaV0gPSBsZ1tpIC8gMl0gKyAxOwogICAgZm9yIChpbnQgayA9IDE7ICgxIDw8IGspIDw9IG07ICsraykgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpICsgKDEgPDwgaykgPD0gbTsgKytpKSB7CiAgICAgICAgICAgIGludCB4ID0gc3RbayAtIDFdW2ldOwogICAgICAgICAgICBpbnQgeSA9IHN0W2sgLSAxXVtpICsgKDEgPDwgKGsgLSAxKSldOwogICAgICAgICAgICBzdFtrXVtpXSA9IChkZXB0aFt4XSA8IGRlcHRoW3ldID8geCA6IHkpOwogICAgICAgIH0KICAgIH0KfQoKaW50IExDQShpbnQgdSwgaW50IHYpIHsKICAgIGludCBMID0gZmlyc3RbdV0sIFIgPSBmaXJzdFt2XTsKICAgIGlmIChMID4gUikgc3dhcChMLCBSKTsKICAgIGludCBrID0gbGdbUiAtIEwgKyAxXTsKICAgIGludCB4ID0gc3Rba11bTF0sIHkgPSBzdFtrXVtSIC0gKDEgPDwgaykgKyAxXTsKICAgIHJldHVybiAoZGVwdGhbeF0gPCBkZXB0aFt5XSkgPyBldWxlclt4XSA6IGV1bGVyW3ldOwp9CgpsbCBkaXN0KGxsIHUsIGxsIHYpIHsKICAgIHJldHVybiBkZXB0aFtmaXJzdFt1XV0gKyBkZXB0aFtmaXJzdFt2XV0gLSAyICogZGVwdGhbZmlyc3RbTENBKHUsIHYpXV07Cn0KCnZvaWQgYmZzKGxsIGNvKSB7CiAgICBxdWV1ZTxsbD4gcSA7CiAgICBmb3IobGwgdiA6IGNvbG9yW2NvIF0pIHsKICAgICAgICBkaXNbY29dW3ZdID0gMCA7CiAgICAgICAgcS5wdXNoKHYpIDsKICAgIH0KICAgIHdoaWxlKCFxLmVtcHR5KCkpIHsKICAgICAgICBsbCB1ID0gcS5mcm9udCgpIDsgcS5wb3AoKSA7CiAgICAgICAgZm9yKGxsIHYgOiBhZGpbdV0pIHsKICAgICAgICAgICAgaWYoZGlzW2NvXVt2XSA9PSAwICYmIHYgIT0gdSkgewogICAgICAgICAgICAgICAgZGlzW2NvXVt2XSA9IGRpc1tjb11bdV0gKyAxIDsKICAgICAgICAgICAgICAgIHEucHVzaCh2KSA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCnZvaWQgaW5pdCgpIHsKICAgIGNpbj4+biA+PiBxdWUgOwogICAgRk9SKGksMSwgbikgY2luID4+IGNbaV0sIGNwci5wdXNoX2JhY2soY1tpXSksIG1wW2NbaV1dKys7CiAgICBjb21wYXJlKGNwcikgOwogICAgbnVtX2NvbG9yID0gY3ByLnNpemUoKSA7CiAgICBGT1IoaSwgMSxuKSB7CiAgICAgICAgY1tpXSA9IGxvd2VyX2JvdW5kKGNwci5iZWdpbigpLCBjcHIuZW5kKCksIGNbaV0pIC0gY3ByLmJlZ2luKCkgKyAxOwogICAgICAgIGRlZ1tjW2ldXSArKyA7CiAgICAgICAgY29sb3JbY1tpXV0ucHVzaF9iYWNrKGkpIDsKICAgIH0KICAgIEZPUihpLCAxLCBuIC0xICkgewogICAgICAgIGxsIHgsIHkgOyBjaW4gPj4geD4+IHkgOwogICAgICAgIGFkalt4XS5wdXNoX2JhY2soeSkgOwogICAgICAgIGFkalt5XS5wdXNoX2JhY2soeCkgOwogICAgfQogICAgLy8gTENBIHByZXByb2Nlc3MKICAgIGRmc19ldWxlcigxLCAwLCAwKTsKICAgIGJ1aWxkX3NwYXJzZSgpOwogICAgRk9SKGksIDEsIG51bV9jb2xvcikgaWYoZGVnW2ldID49IEJMT0NLX1NJWkUgKSBiZnMoaSkgOwp9Cgp2b2lkIHNvbHZlKCkgewogICAgRk9SKGksIDEscXVlICkgewogICAgICAgIGxsIHUsIGMgOyBjaW4gPj4gdSA+PiBjIDsKICAgICAgICBpZihtcFtjXSA9PSAwICkgewogICAgICAgICAgICBjb3V0IDw8IC0xIDw8IGVsIDsKICAgICAgICAgICAgY29udGludWUgOwogICAgICAgIH0KICAgICAgICBjID0gbG93ZXJfYm91bmQoY3ByLmJlZ2luKCksIGNwci5lbmQoKSwgYyAgKSAtIGNwci5iZWdpbigpICsgMSA7CiAgICAgICAgaWYoZGVnW2NdID49IEJMT0NLX1NJWkUpIGNvdXQgPDwgZGlzW2NdW3VdIDw8IGVsIDsKICAgICAgICBlbHNlICB7CiAgICAgICAgICAgIGxsIGFucyA9IElORiA7CiAgICAgICAgICAgIGZvcihsbCB2IDogY29sb3JbY10pIG1pbmltaXplKGFucywgZGlzdCh1LCB2ICkpIDsKICAgICAgICAgICAgY291dCA8PCBhbnMgPDwgZWwgOwogICAgICAgIH0KICAgIH0KfQoKX19ST09UX18gewogICAgZmFzdDsKICAgIGludCB0ID0xIDsKICAgIHdoaWxlKHQtLSApIHsKICAgICAgICBpbml0KCk7CiAgICAgICAgc29sdmUoKTsKICAgIH0KfQ==