#include <bits/stdc++.h>
using namespace std;
//
const int maxn = 5e4 + 5;
const int S = 225;
//
int n, m, A[maxn], id[maxn], h[maxn], st[maxn], rmq[maxn << 1][17], d[S][maxn];
vector<int> edge[maxn], color[maxn];
bitset<maxn> vis;
//
void DFS (int u, int par)
{
    rmq[++m][0] = u;
    st[u] = m;
    h[u] = h[par] + 1;
    for (int v : edge[u])
        if (v != par)
            DFS(v, u),
            rmq[++m][0] = u;
}
void BFS (int x)
{
    queue<int> qu;
    //
    id[x] = ++m;
    vis.reset();
    for (int v : color[x])
        vis.set(v), qu.push(v);
    for (int t = 1; !qu.empty(); ++t)
        for (int u, i = qu.size(); i > 0; --i)
        {
            u = qu.front(), qu.pop();
            for (int v : edge[u])
                if (!vis[v])
                    d[m][v] = t,
                    vis.set(v), qu.push(v);
        }
}
void prepare (void)
{
    DFS(1, 1);
    for (int u, v, j = 1; (1 << j) <= m; ++j)
        for (int i = 1; i + (1 << j) - 1 <= m; ++i)
            u = rmq[i][j - 1], v = rmq[i + (1 << j - 1)][j - 1],
            rmq[i][j] = h[u] < h[v] ? u : v;
    m = 0;
    for (int i = 1; i <= n; ++i)
        if (color[i].size() > S)
            BFS(i);
}
int LCA (int u, int v)
{
    int k, l = st[u], r = st[v];
    //
    if (l > r)
        swap(l, r);
    k = __lg(r - l + 1);
    u = rmq[l][k], v = rmq[r - (1 << k) + 1][k];
    return h[u] < h[v] ? u : v;
}
int query (int u, int x)
{
    int res = 2e9;
    //
    if (color[x].empty())
        return -1;
    if (color[x].size() > S)
        return d[id[x]][u];
    for (int v : color[x])
        res = min(res, h[u] + h[v] - h[LCA(u, v)] * 2);
    return res;
}
//
void process (void)
{
    int q, u, x;
    //
    cin >> n >> q;
    for (int i = 1; i <= n; ++i)
        cin >> A[i],
        color[A[i]].emplace_back(i);
    for (int v, i = 1; i < n; ++i)
        cin >> u >> v,
        edge[u].emplace_back(v),
        edge[v].emplace_back(u);
    prepare();
    while (q--)
        cin >> u >> x,
        cout << query(u, x) << '\n';
}
//
signed main (void)
{
    ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
    process();
}