/*
* @Author: hungeazy
* @Date: 2024-09-12 22:14:27
* @Last Modified by: hungeazy
* @Last Modified time: 2024-12-12 21:35:00
*/
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
// #pragma GCC optimize("O3")
// #pragma GCC optimize("unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
using namespace std;
using namespace __gnu_pbds;
#define fast ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define int long long
#define ll long long
#define ull unsigned long long
#define sz(x) x.size()
#define sqr(x) (1LL * (x) * (x))
#define all(x) x.begin(), x.end()
#define fill(f,x) memset(f,x,sizeof(f))
#define FOR(i,l,r) for(int i=l;i<=r;i++)
#define FOD(i,r,l) for(int i=r;i>=l;i--)
#define debug(x) cout << #x << " = " << x << '\n'
#define ii pair<int,int>
#define iii pair<int,ii>
#define di pair<ii,ii>
#define vi vector<int>
#define vii vector<ii>
#define mii map<int,int>
#define fi first
#define se second
#define pb push_back
#define MOD 1000000007
#define __lcm(a,b) (1ll * ((a) / __gcd((a), (b))) * (b))
#define YES cout << "YES\n"
#define NO cout << "NO\n"
#define MASK(i) (1LL << (i))
#define c_bit(i) __builtin_popcountll(i)
#define BIT(x,i) ((x) & MASK(i))
#define SET_ON(x,i) ((x) | MASK(i))
#define SET_OFF(x,i) ((x) & ~MASK(i))
#define oo 1e18
#define name ""
#define endl '\n'
// #define time() cerr << endl << "-------------Time:" << 1000.0 * clock() / CLOCKS_PER_SEC << "ms.";
template<typename T> bool maximize(T &res, const T &val) { if (res < val){ res = val; return true; }; return false; }
template<typename T> bool minimize(T &res, const T &val) { if (res > val){ res = val; return true; }; return false; }
template <class T> using ordered_set = tree <T, null_type, less_equal <T>, rb_tree_tag,tree_order_statistics_node_update>;
mt19937 rnd;
const int N = (int)2e5+10;
int a[N],n,q;
vi g[N];
ii query[N];
namespace hungeazy {
struct Query {
int l,r,id,lca;
} b[N];
int in[N],out[N],tour[N],cnt=0,S;
int par[N][20],h[N],dem[N],ans[N];
bool visited[N];
int randRange(int l, int r)
{
return uniform_int_distribution<int>(l,r)(rnd);
}
void DFS(int u, int p)
{
in[u] = ++cnt;
tour[cnt] = u;
for (int v : g[u])
if (v != p)
{
h[v] = h[u]+1;
par[v][0] = u;
DFS(v,u);
}
out[u] = ++cnt;
tour[cnt] = u;
}
void init()
{
FOR(j,1,log2(n))
FOR(i,1,n) par[i][j] = par[par[i][j-1]][j-1];
}
int LCA(int x, int y)
{
if (h[x] < h[y]) swap(x,y);
int z = log2(n);
FOD(i,z,0)
if (h[x]-h[y] >= MASK(i)) x = par[x][i];
if (x == y) return x;
FOD(i,z,0)
if (par[x][i] != par[y][i]) x = par[x][i], y = par[y][i];
return par[x][0];
}
bool cmp(Query &x, Query &y)
{
if (x.l/S != y.l/S) return x.l < y.l;
return x.r < y.r;
}
void calc(int x)
{
if (visited[x]) dem[a[x]]--;
else dem[a[x]]++;
visited[x] ^= 1;
}
void solve(void)
{
DFS(1,-1);
init();
// FOR(i,1,n) cout << in[i] << " " << out[i] << endl;
S = sqrt(q);
FOR(i,1,q)
{
int u,v;
tie(u,v) = query[i];
b[i].lca = LCA(u,v);
if (in[u] > in[v]) swap(u,v);
if (b[i].lca == u) b[i].l = in[u], b[i].r = in[v];
else b[i].l = out[u], b[i].r = in[v];
b[i].id = i;
}
sort(b+1,b+q+1,cmp);
int l = 1, r = 0;
FOR(i,1,q)
{
while (l < b[i].l)
{
calc(tour[l]);
l++;
}
while (l > b[i].l)
{
l--;
calc(tour[l]);
}
while (r < b[i].r)
{
r++;
calc(tour[r]);
}
while (r > b[i].r)
{
calc(tour[r]);
r--;
}
if (b[i].lca != tour[b[i].l] and b[i].lca != tour[b[i].r])
calc(b[i].lca);
int val = -1, u = tour[b[i].l], v = tour[b[i].r], k = h[u]+h[v]-2*h[LCA(u,v)];
FOR(rep,1,50)
{
int x = randRange(1,n);
if (dem[a[x]] >= (k+1)/2+1)
{
val = a[x];
break;
}
}
ans[b[i].id] = val;
if (b[i].lca != tour[b[i].l] and b[i].lca != tour[b[i].r])
calc(b[i].lca);
}
FOR(i,1,q) cout << ans[i] << endl;
}
}
signed main()
{
fast;
if (fopen(name".inp","r"))
{
freopen(name".inp","r",stdin);
freopen(name".out","w",stdout);
}
rnd.seed(time(0));
cin >> n >> q;
FOR(i,1,n) cin >> a[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 >> query[i].fi >> query[i].se;
hungeazy::solve();
// time();
return 0;
}
LyoKKiBAQXV0aG9yOiBodW5nZWF6eQoqIEBEYXRlOiAgIDIwMjQtMDktMTIgMjI6MTQ6MjcKKiBATGFzdCBNb2RpZmllZCBieTogICBodW5nZWF6eQoqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjQtMTItMTIgMjE6MzU6MDAKKi8KI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4gCiNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPiAKLy8gI3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk8zIikgIAovLyAjcHJhZ21hIEdDQyBvcHRpbWl6ZSgidW5yb2xsLWxvb3BzIikgIAovLyAjcHJhZ21hIEdDQyB0YXJnZXQoImF2eDIsYm1pLGJtaTIscG9wY250LGx6Y250IikgIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsgCiNkZWZpbmUgZmFzdCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZShOVUxMKTsgY291dC50aWUoTlVMTCk7CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGxsIGxvbmcgbG9uZyAKI2RlZmluZSB1bGwgdW5zaWduZWQgbG9uZyBsb25nCiNkZWZpbmUgc3ooeCkgeC5zaXplKCkKI2RlZmluZSBzcXIoeCkgKDFMTCAqICh4KSAqICh4KSkKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLCB4LmVuZCgpCiNkZWZpbmUgZmlsbChmLHgpIG1lbXNldChmLHgsc2l6ZW9mKGYpKQojZGVmaW5lIEZPUihpLGwscikgZm9yKGludCBpPWw7aTw9cjtpKyspCiNkZWZpbmUgRk9EKGkscixsKSBmb3IoaW50IGk9cjtpPj1sO2ktLSkKI2RlZmluZSBkZWJ1Zyh4KSBjb3V0IDw8ICN4IDw8ICIgPSAiIDw8IHggPDwgJ1xuJwojZGVmaW5lIGlpIHBhaXI8aW50LGludD4KI2RlZmluZSBpaWkgcGFpcjxpbnQsaWk+CiNkZWZpbmUgZGkgcGFpcjxpaSxpaT4KI2RlZmluZSB2aSB2ZWN0b3I8aW50PgojZGVmaW5lIHZpaSB2ZWN0b3I8aWk+CiNkZWZpbmUgbWlpIG1hcDxpbnQsaW50PgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgTU9EIDEwMDAwMDAwMDcKI2RlZmluZSBfX2xjbShhLGIpICgxbGwgKiAoKGEpIC8gX19nY2QoKGEpLCAoYikpKSAqIChiKSkKI2RlZmluZSBZRVMgY291dCA8PCAiWUVTXG4iCiNkZWZpbmUgTk8gY291dCA8PCAiTk9cbiIKI2RlZmluZSBNQVNLKGkpICgxTEwgPDwgKGkpKQojZGVmaW5lIGNfYml0KGkpIF9fYnVpbHRpbl9wb3Bjb3VudGxsKGkpCiNkZWZpbmUgQklUKHgsaSkgKCh4KSAmIE1BU0soaSkpCiNkZWZpbmUgU0VUX09OKHgsaSkgKCh4KSB8IE1BU0soaSkpCiNkZWZpbmUgU0VUX09GRih4LGkpICgoeCkgJiB+TUFTSyhpKSkKI2RlZmluZSBvbyAxZTE4CiNkZWZpbmUgbmFtZSAiIgojZGVmaW5lIGVuZGwgJ1xuJwovLyAjZGVmaW5lIHRpbWUoKSBjZXJyIDw8IGVuZGwgPDwgIi0tLS0tLS0tLS0tLS1UaW1lOiIgPDwgMTAwMC4wICogY2xvY2soKSAvIENMT0NLU19QRVJfU0VDIDw8ICJtcy4iOwp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIG1heGltaXplKFQgJnJlcywgY29uc3QgVCAmdmFsKSB7IGlmIChyZXMgPCB2YWwpeyByZXMgPSB2YWw7IHJldHVybiB0cnVlOyB9OyByZXR1cm4gZmFsc2U7IH0KdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBtaW5pbWl6ZShUICZyZXMsIGNvbnN0IFQgJnZhbCkgeyBpZiAocmVzID4gdmFsKXsgcmVzID0gdmFsOyByZXR1cm4gdHJ1ZTsgfTsgcmV0dXJuIGZhbHNlOyB9CnRlbXBsYXRlIDxjbGFzcyBUPiB1c2luZyBvcmRlcmVkX3NldCA9IHRyZWUgPFQsIG51bGxfdHlwZSwgbGVzc19lcXVhbCA8VD4sIHJiX3RyZWVfdGFnLHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT47Cm10MTk5Mzcgcm5kOwpjb25zdCBpbnQgTiA9IChpbnQpMmU1KzEwOwppbnQgYVtOXSxuLHE7CnZpIGdbTl07CmlpIHF1ZXJ5W05dOwoKbmFtZXNwYWNlIGh1bmdlYXp5IHsKCglzdHJ1Y3QgUXVlcnkgewoJCWludCBsLHIsaWQsbGNhOwoJfSBiW05dOwoKCWludCBpbltOXSxvdXRbTl0sdG91cltOXSxjbnQ9MCxTOwoJaW50IHBhcltOXVsyMF0saFtOXSxkZW1bTl0sYW5zW05dOwoJYm9vbCB2aXNpdGVkW05dOwoKCWludCByYW5kUmFuZ2UoaW50IGwsIGludCByKQoJewoJCXJldHVybiB1bmlmb3JtX2ludF9kaXN0cmlidXRpb248aW50PihsLHIpKHJuZCk7Cgl9CgoJdm9pZCBERlMoaW50IHUsIGludCBwKQoJewoJCWluW3VdID0gKytjbnQ7CgkJdG91cltjbnRdID0gdTsKCQlmb3IgKGludCB2IDogZ1t1XSkKCQkJaWYgKHYgIT0gcCkgCgkJCXsKCQkJCWhbdl0gPSBoW3VdKzE7CgkJCQlwYXJbdl1bMF0gPSB1OwoJCQkJREZTKHYsdSk7CgkJCX0KCQlvdXRbdV0gPSArK2NudDsKCQl0b3VyW2NudF0gPSB1OwoJfQoKCXZvaWQgaW5pdCgpCgl7CgkJRk9SKGosMSxsb2cyKG4pKQoJCQlGT1IoaSwxLG4pIHBhcltpXVtqXSA9IHBhcltwYXJbaV1bai0xXV1bai0xXTsKCX0KCglpbnQgTENBKGludCB4LCBpbnQgeSkKCXsKCQlpZiAoaFt4XSA8IGhbeV0pIHN3YXAoeCx5KTsKCQlpbnQgeiA9IGxvZzIobik7CgkJRk9EKGkseiwwKQoJCQlpZiAoaFt4XS1oW3ldID49IE1BU0soaSkpIHggPSBwYXJbeF1baV07CgkJaWYgKHggPT0geSkgcmV0dXJuIHg7CgkJRk9EKGkseiwwKQoJCQlpZiAocGFyW3hdW2ldICE9IHBhclt5XVtpXSkgeCA9IHBhclt4XVtpXSwgeSA9IHBhclt5XVtpXTsKCQlyZXR1cm4gcGFyW3hdWzBdOwoJfQoKCWJvb2wgY21wKFF1ZXJ5ICZ4LCBRdWVyeSAmeSkKCXsKCQlpZiAoeC5sL1MgIT0geS5sL1MpIHJldHVybiB4LmwgPCB5Lmw7CgkJcmV0dXJuIHguciA8IHkucjsKCX0KCgl2b2lkIGNhbGMoaW50IHgpCgl7CgkJaWYgKHZpc2l0ZWRbeF0pIGRlbVthW3hdXS0tOwoJCWVsc2UgZGVtW2FbeF1dKys7CgkJdmlzaXRlZFt4XSBePSAxOwoJfQoKCXZvaWQgc29sdmUodm9pZCkKCXsKCQlERlMoMSwtMSk7CgkJaW5pdCgpOwoJCS8vIEZPUihpLDEsbikgY291dCA8PCBpbltpXSA8PCAiICIgPDwgb3V0W2ldIDw8IGVuZGw7CgkJUyA9IHNxcnQocSk7CgkJRk9SKGksMSxxKQoJCXsKCQkJaW50IHUsdjsKCQkJdGllKHUsdikgPSBxdWVyeVtpXTsKCQkJYltpXS5sY2EgPSBMQ0EodSx2KTsKCQkJaWYgKGluW3VdID4gaW5bdl0pIHN3YXAodSx2KTsKCQkJaWYgKGJbaV0ubGNhID09IHUpIGJbaV0ubCA9IGluW3VdLCBiW2ldLnIgPSBpblt2XTsKCQkJZWxzZSBiW2ldLmwgPSBvdXRbdV0sIGJbaV0uciA9IGluW3ZdOwoJCQliW2ldLmlkID0gaTsKCQl9CgkJc29ydChiKzEsYitxKzEsY21wKTsKCQlpbnQgbCA9IDEsIHIgPSAwOwoJCUZPUihpLDEscSkKCQl7CgkJCXdoaWxlIChsIDwgYltpXS5sKQoJCQl7CgkJCQljYWxjKHRvdXJbbF0pOwoJCQkJbCsrOwoJCQl9CgkJCXdoaWxlIChsID4gYltpXS5sKQoJCQl7CgkJCQlsLS07CgkJCQljYWxjKHRvdXJbbF0pOwoJCQl9CgkJCXdoaWxlIChyIDwgYltpXS5yKQoJCQl7CgkJCQlyKys7CgkJCQljYWxjKHRvdXJbcl0pOwoJCQl9CgkJCXdoaWxlIChyID4gYltpXS5yKQoJCQl7CgkJCQljYWxjKHRvdXJbcl0pOwoJCQkJci0tOwoJCQl9CgkJCWlmIChiW2ldLmxjYSAhPSB0b3VyW2JbaV0ubF0gYW5kIGJbaV0ubGNhICE9IHRvdXJbYltpXS5yXSkKCQkJCWNhbGMoYltpXS5sY2EpOwoJCQlpbnQgdmFsID0gLTEsIHUgPSB0b3VyW2JbaV0ubF0sIHYgPSB0b3VyW2JbaV0ucl0sIGsgPSBoW3VdK2hbdl0tMipoW0xDQSh1LHYpXTsKCQkJRk9SKHJlcCwxLDUwKQoJCQl7CgkJCQlpbnQgeCA9IHJhbmRSYW5nZSgxLG4pOwoJCQkJaWYgKGRlbVthW3hdXSA+PSAoaysxKS8yKzEpCgkJCQl7CgkJCQkJdmFsID0gYVt4XTsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQlhbnNbYltpXS5pZF0gPSB2YWw7CgkJCWlmIChiW2ldLmxjYSAhPSB0b3VyW2JbaV0ubF0gYW5kIGJbaV0ubGNhICE9IHRvdXJbYltpXS5yXSkKCQkJCWNhbGMoYltpXS5sY2EpOwoJCX0KCQlGT1IoaSwxLHEpIGNvdXQgPDwgYW5zW2ldIDw8IGVuZGw7Cgl9CgkKfQoKc2lnbmVkIG1haW4oKQp7CiAgICBmYXN0OwogICAgaWYgKGZvcGVuKG5hbWUiLmlucCIsInIiKSkKICAgIHsKICAgIAlmcmVvcGVuKG5hbWUiLmlucCIsInIiLHN0ZGluKTsKICAgIAlmcmVvcGVuKG5hbWUiLm91dCIsInciLHN0ZG91dCk7CiAgICB9CiAgICBybmQuc2VlZCh0aW1lKDApKTsKICAgIGNpbiA+PiBuID4+IHE7CiAgICBGT1IoaSwxLG4pIGNpbiA+PiBhW2ldOwogICAgRk9SKGksMSxuLTEpCiAgICB7CiAgICAJaW50IHUsdjsKICAgIAljaW4gPj4gdSA+PiB2OwogICAgCWdbdV0ucGIodik7IGdbdl0ucGIodSk7CiAgICB9CiAgICBGT1IoaSwxLHEpIGNpbiA+PiBxdWVyeVtpXS5maSA+PiBxdWVyeVtpXS5zZTsKICAgIGh1bmdlYXp5Ojpzb2x2ZSgpOwogICAgLy8gdGltZSgpOwogICAgcmV0dXJuIDA7Cn0=