#include <bits/stdc++.h>
using namespace std;
bool memory1;
typedef long long ll;
typedef unsigned long long ull;
typedef double dbe;
typedef pair<ll, ll> pll;
typedef vector<ll> vll;
typedef vector<int> vii;
#define openFile(name) freopen((name ".inp"), "r", stdin), freopen((name ".out"), "w", stdout)
#define FOR(i, a, b, x) for (int i = (a); i <= (b); i += (x))
#define ROF(i, a, b, x) for (int i = (a); i >= (b); i += (x))
#define fi first
#define se second
#define MASK(x) (1LL << (x))
#define getBit(mask, i) (((mask) >> (i)) & 1)
#define BitOn(mask) (__builtin_popcountll(mask))
const int maxN = 5e4 + 2;
//const ll maxBit = MASK(8) + 2;
const ll LOG = 16;
const ll INF18 = 1e18;
const int INF9 = 1e9;
//const ll INF3f = 0x3f3f3f3f3f3f3f3f;
const ll MOD = 1e9 + 7;
//////////////////////////////////////////////
const ll BL = 256;
struct Query12 {
int ty, id;
Query12(int t = 0, int i = 0) : ty(t), id(i) {}
};
struct Query3 {
int u, v, id;
Query3(int uu = 0, int vv = 0, int i = 0) : u(uu), v(vv), id(i) {}
};
int n, m, timeDFS;
int a[maxN];
int ans[maxN];
int sz[maxN];
int h[maxN];
int tin[maxN], tout[maxN];
int d[maxN][maxN / BL + 5]; // goc u
int f[maxN][maxN / BL + 5]; // 1 -> u
int pa[maxN][LOG + 2];
int ver[maxN];
int mark[maxN];
int colID[maxN];
map<int, int> mp;
vii stColor;
vii adj[maxN];
vector<Query12> qr12[maxN];
vector<Query3> qr3;
vii colBL;
void dfs(int u) {
tin[u] = ++timeDFS;
++d[u][colID[a[u]]];
++sz[u];
ver[tin[u]] = u;
++f[u][colID[a[u]]];
for (int v : adj[u]) if (v != pa[u][0]) {
pa[v][0] = u;
h[v] = h[u] + 1;
FOR (i, 1, LOG, 1) pa[v][i] = pa[pa[v][i - 1]][i - 1];
for (ll col : colBL) f[v][colID[col]] += f[u][colID[col]];
dfs(v);
for (ll col : colBL)
d[u][colID[col]] += d[v][colID[col]];
sz[u] += sz[v];
}
tout[u] = timeDFS;
}
void add(ll u) {
++mp[a[u]];
}
void sack(ll u, bool keep) {
int bigC = -1;
for (int v : adj[u]) if (v != pa[u][0])
if (bigC == -1 || sz[bigC] < sz[v])
bigC = v;
for (int v : adj[u]) if (v != pa[u][0] && v != bigC)
sack(v, false);
if (bigC != -1)
sack(bigC, true);
add(u);
for (int v : adj[u])
if (v != pa[u][0] && v != bigC)
FOR (i, tin[v], tout[v], 1)
add(ver[i]);
int siz;
for (Query12 &q : qr12[u]) {
int col = -1;
if (q.ty == 1) {
siz = sz[u];
if (siz < 2 * BL) {
for (pair<int, int> p : mp) // col cnt
if (p.se > siz / 2) {
col = p.fi;
break;
}
}
else
for (int c : colBL)
if (d[u][colID[c]] > siz / 2) {
col = c;
break;
}
}
else {
siz = n - sz[u];
if (siz < 2 * BL) {
for (int c : stColor) // col cnt
if (mark[c] - mp[c] > siz / 2) {
col = c;
break;
}
}
if (col == -1)
for (int c : colBL)
if (d[1][colID[c]] - d[u][colID[c]] > siz / 2) {
col = c;
break;
}
}
ans[q.id] = col;
}
if (!keep) mp.clear();
}
int lca(int u, int v) {
if (h[u] != h[v]) {
if (h[u] < h[v]) swap(u, v);
int k = h[u] - h[v];
for (int i = 0; MASK(i) <= k; ++i)
if (getBit(k, i))
u = pa[u][i];
}
if (u == v) return u;
int k = __lg(h[u]);
ROF (i, k, 0, -1)
if (pa[u][i] != pa[v][i]) {
u = pa[u][i];
v = pa[v][i];
}
return pa[u][0];
}
int pathCol(int u, int v, int p, int sz) {
map<int, int> cnt;
while (u != p) {
++cnt[a[u]];
u = pa[u][0];
}
while (v != p) {
++cnt[a[v]];
v = pa[v][0];
}
++cnt[a[p]];
for (pair<int, int> p : cnt) // col cnt
if (p.se > sz / 2)
return p.fi;
return -1;
}
void Solve() {
sort(colBL.begin(), colBL.end());
for (int col : colBL)
colID[col] = lower_bound(colBL.begin(), colBL.end(), col) - colBL.begin() + 1;
FOR (i, 1, n, 1) if (0 < mark[i] && mark[i] < BL) stColor.push_back(i);
h[1] = 1;
dfs(1);
sack(1, false);
// truy van 3
for (Query3 &q : qr3) {
int u = q.u, v = q.v;
int p = lca(u, v);
int sz = h[u] + h[v] - 2 * h[p] + 1;
ans[q.id] = -1;
if (sz <= BL * 2)
ans[q.id] = pathCol(u, v, p, sz);
else {
for (int col : colBL) {
int cID = colID[col];
int val = f[u][cID] + f[v][cID] - 2 * f[p][cID];
if (a[p] == col) ++val;
if (val > sz / 2) {
ans[q.id] = col;
break;
}
}
}
}
FOR (i, 1, m, 1) cout << ans[i] << "\n";
}
void input() {
cin >> n >> m;
FOR (i, 1, n, 1) {
cin >> a[i];
++mark[a[i]];
if (mark[a[i]] == BL) colBL.push_back(a[i]);
}
int u, v, ty;
FOR (i, 2, n, 1) {
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
FOR (i, 1, m, 1) {
cin >> ty;
if (ty == 1 || ty == 2) {
cin >> u;
qr12[u].emplace_back(ty, i);
}
else {
cin >> u >> v;
qr3.emplace_back(u, v, i);
}
}
Solve();
}
int main() {
openFile("TQUERY");
ios_base::sync_with_stdio(0);
cin.tie(0);
input();
//bool memory2;
//cerr << "\n\n\nTime: "<< 1000.0 * clock() / CLOCKS_PER_SEC << " ms";
//cerr << "\n\n\nMemory: "<< abs(&memory1 - &memory2) * 1.0 / MASK(20) <<" MB";
return 0;
}
// nhan0123456
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmJvb2wgbWVtb3J5MTsKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1bGw7CnR5cGVkZWYgZG91YmxlIGRiZTsKdHlwZWRlZiBwYWlyPGxsLCBsbD4gcGxsOwp0eXBlZGVmIHZlY3RvcjxsbD4gdmxsOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpaTsKCiNkZWZpbmUgb3BlbkZpbGUobmFtZSkgZnJlb3BlbigobmFtZSAiLmlucCIpLCAiciIsIHN0ZGluKSwgZnJlb3BlbigobmFtZSAiLm91dCIpLCAidyIsIHN0ZG91dCkKI2RlZmluZSBGT1IoaSwgYSwgYiwgeCkgZm9yIChpbnQgaSA9IChhKTsgaSA8PSAoYik7IGkgKz0gKHgpKQojZGVmaW5lIFJPRihpLCBhLCBiLCB4KSBmb3IgKGludCBpID0gKGEpOyBpID49IChiKTsgaSArPSAoeCkpCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBNQVNLKHgpICgxTEwgPDwgKHgpKQojZGVmaW5lIGdldEJpdChtYXNrLCBpKSAoKChtYXNrKSA+PiAoaSkpICYgMSkKI2RlZmluZSBCaXRPbihtYXNrKSAoX19idWlsdGluX3BvcGNvdW50bGwobWFzaykpCgpjb25zdCBpbnQgbWF4TiA9IDVlNCArIDI7Ci8vY29uc3QgbGwgbWF4Qml0ID0gTUFTSyg4KSArIDI7CmNvbnN0IGxsIExPRyA9IDE2Owpjb25zdCBsbCBJTkYxOCA9IDFlMTg7CmNvbnN0IGludCBJTkY5ID0gMWU5OwovL2NvbnN0IGxsIElORjNmID0gMHgzZjNmM2YzZjNmM2YzZjNmOwpjb25zdCBsbCBNT0QgPSAxZTkgKyA3OwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmNvbnN0IGxsIEJMID0gMjU2OwoKc3RydWN0IFF1ZXJ5MTIgewogICAgaW50IHR5LCBpZDsKICAgIFF1ZXJ5MTIoaW50IHQgPSAwLCBpbnQgaSA9IDApIDogdHkodCksIGlkKGkpIHt9Cn07CgpzdHJ1Y3QgUXVlcnkzIHsKICAgIGludCB1LCB2LCBpZDsKICAgIFF1ZXJ5MyhpbnQgdXUgPSAwLCBpbnQgdnYgPSAwLCBpbnQgaSA9IDApIDogdSh1dSksIHYodnYpLCBpZChpKSB7fQp9OwoKaW50IG4sIG0sIHRpbWVERlM7CmludCBhW21heE5dOwppbnQgYW5zW21heE5dOwoKaW50IHN6W21heE5dOwppbnQgaFttYXhOXTsKaW50IHRpblttYXhOXSwgdG91dFttYXhOXTsKaW50IGRbbWF4Tl1bbWF4TiAvIEJMICsgNV07IC8vIGdvYyB1CmludCBmW21heE5dW21heE4gLyBCTCArIDVdOyAvLyAxIC0+IHUKaW50IHBhW21heE5dW0xPRyArIDJdOwppbnQgdmVyW21heE5dOwoKaW50IG1hcmtbbWF4Tl07CmludCBjb2xJRFttYXhOXTsKCm1hcDxpbnQsIGludD4gbXA7CnZpaSBzdENvbG9yOwp2aWkgYWRqW21heE5dOwp2ZWN0b3I8UXVlcnkxMj4gcXIxMlttYXhOXTsKdmVjdG9yPFF1ZXJ5Mz4gcXIzOwp2aWkgY29sQkw7Cgp2b2lkIGRmcyhpbnQgdSkgewogICAgdGluW3VdID0gKyt0aW1lREZTOwogICAgKytkW3VdW2NvbElEW2FbdV1dXTsKICAgICsrc3pbdV07CiAgICB2ZXJbdGluW3VdXSA9IHU7CiAgICArK2ZbdV1bY29sSURbYVt1XV1dOwoKICAgIGZvciAoaW50IHYgOiBhZGpbdV0pIGlmICh2ICE9IHBhW3VdWzBdKSB7CiAgICAgICAgcGFbdl1bMF0gPSB1OwogICAgICAgIGhbdl0gPSBoW3VdICsgMTsKCiAgICAgICAgRk9SIChpLCAxLCBMT0csIDEpIHBhW3ZdW2ldID0gcGFbcGFbdl1baSAtIDFdXVtpIC0gMV07CgogICAgICAgIGZvciAobGwgY29sIDogY29sQkwpIGZbdl1bY29sSURbY29sXV0gKz0gZlt1XVtjb2xJRFtjb2xdXTsKCiAgICAgICAgZGZzKHYpOwoKICAgICAgICBmb3IgKGxsIGNvbCA6IGNvbEJMKQogICAgICAgICAgICBkW3VdW2NvbElEW2NvbF1dICs9IGRbdl1bY29sSURbY29sXV07CgogICAgICAgIHN6W3VdICs9IHN6W3ZdOwogICAgfQogICAgdG91dFt1XSA9IHRpbWVERlM7Cn0KCnZvaWQgYWRkKGxsIHUpIHsKICAgICsrbXBbYVt1XV07Cn0KCnZvaWQgc2FjayhsbCB1LCBib29sIGtlZXApIHsKICAgIGludCBiaWdDID0gLTE7CiAgICBmb3IgKGludCB2IDogYWRqW3VdKSBpZiAodiAhPSBwYVt1XVswXSkKICAgICAgICBpZiAoYmlnQyA9PSAtMSB8fCBzeltiaWdDXSA8IHN6W3ZdKQogICAgICAgICAgICBiaWdDID0gdjsKCiAgICBmb3IgKGludCB2IDogYWRqW3VdKSBpZiAodiAhPSBwYVt1XVswXSAmJiB2ICE9IGJpZ0MpCiAgICAgICAgc2Fjayh2LCBmYWxzZSk7CgogICAgaWYgKGJpZ0MgIT0gLTEpCiAgICAgICAgc2FjayhiaWdDLCB0cnVlKTsKCiAgICBhZGQodSk7CiAgICBmb3IgKGludCB2IDogYWRqW3VdKQogICAgICAgIGlmICh2ICE9IHBhW3VdWzBdICYmIHYgIT0gYmlnQykKICAgICAgICAgICAgRk9SIChpLCB0aW5bdl0sIHRvdXRbdl0sIDEpCiAgICAgICAgICAgICAgICBhZGQodmVyW2ldKTsKCiAgICBpbnQgc2l6OwogICAgZm9yIChRdWVyeTEyICZxIDogcXIxMlt1XSkgewogICAgICAgIGludCBjb2wgPSAtMTsKICAgICAgICBpZiAocS50eSA9PSAxKSB7CiAgICAgICAgICAgIHNpeiA9IHN6W3VdOwogICAgICAgICAgICBpZiAoc2l6IDwgMiAqIEJMKSB7CiAgICAgICAgICAgICAgICBmb3IgKHBhaXI8aW50LCBpbnQ+IHAgOiBtcCkgLy8gY29sIGNudAogICAgICAgICAgICAgICAgICAgIGlmIChwLnNlID4gc2l6IC8gMikgewogICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBwLmZpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgZm9yIChpbnQgYyA6IGNvbEJMKQogICAgICAgICAgICAgICAgICAgIGlmIChkW3VdW2NvbElEW2NdXSA+IHNpeiAvIDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gYzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgc2l6ID0gbiAtIHN6W3VdOwogICAgICAgICAgICBpZiAoc2l6IDwgMiAqIEJMKSB7CiAgICAgICAgICAgICAgICBmb3IgKGludCBjIDogc3RDb2xvcikgLy8gY29sIGNudAogICAgICAgICAgICAgICAgICAgIGlmIChtYXJrW2NdIC0gbXBbY10gPiBzaXogLyAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IGM7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY29sID09IC0xKQogICAgICAgICAgICAgICAgZm9yIChpbnQgYyA6IGNvbEJMKQogICAgICAgICAgICAgICAgICAgIGlmIChkWzFdW2NvbElEW2NdXSAtIGRbdV1bY29sSURbY11dID4gc2l6IC8gMikgewogICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBjOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFuc1txLmlkXSA9IGNvbDsKICAgIH0KICAgIGlmICgha2VlcCkgbXAuY2xlYXIoKTsKfQoKaW50IGxjYShpbnQgdSwgaW50IHYpIHsKICAgIGlmIChoW3VdICE9IGhbdl0pIHsKICAgICAgICBpZiAoaFt1XSA8IGhbdl0pIHN3YXAodSwgdik7CiAgICAgICAgaW50IGsgPSBoW3VdIC0gaFt2XTsKICAgICAgICBmb3IgKGludCBpID0gMDsgTUFTSyhpKSA8PSBrOyArK2kpCiAgICAgICAgICAgIGlmIChnZXRCaXQoaywgaSkpCiAgICAgICAgICAgICAgICB1ID0gcGFbdV1baV07CiAgICB9CiAgICBpZiAodSA9PSB2KSByZXR1cm4gdTsKCiAgICBpbnQgayA9IF9fbGcoaFt1XSk7CiAgICBST0YgKGksIGssIDAsIC0xKQogICAgICAgIGlmIChwYVt1XVtpXSAhPSBwYVt2XVtpXSkgewogICAgICAgICAgICB1ID0gcGFbdV1baV07CiAgICAgICAgICAgIHYgPSBwYVt2XVtpXTsKICAgICAgICB9CiAgICByZXR1cm4gcGFbdV1bMF07Cn0KCmludCBwYXRoQ29sKGludCB1LCBpbnQgdiwgaW50IHAsIGludCBzeikgewogICAgbWFwPGludCwgaW50PiBjbnQ7CiAgICB3aGlsZSAodSAhPSBwKSB7CiAgICAgICAgKytjbnRbYVt1XV07CiAgICAgICAgdSA9IHBhW3VdWzBdOwogICAgfQogICAgd2hpbGUgKHYgIT0gcCkgewogICAgICAgICsrY250W2Fbdl1dOwogICAgICAgIHYgPSBwYVt2XVswXTsKICAgIH0KICAgICsrY250W2FbcF1dOwogICAgZm9yIChwYWlyPGludCwgaW50PiBwIDogY250KSAvLyBjb2wgY250CiAgICAgICAgaWYgKHAuc2UgPiBzeiAvIDIpCiAgICAgICAgICAgIHJldHVybiBwLmZpOwogICAgcmV0dXJuIC0xOwp9Cgp2b2lkIFNvbHZlKCkgewogICAgc29ydChjb2xCTC5iZWdpbigpLCBjb2xCTC5lbmQoKSk7CgogICAgZm9yIChpbnQgY29sIDogY29sQkwpCiAgICAgICAgY29sSURbY29sXSA9IGxvd2VyX2JvdW5kKGNvbEJMLmJlZ2luKCksIGNvbEJMLmVuZCgpLCBjb2wpIC0gY29sQkwuYmVnaW4oKSArIDE7CgogICAgRk9SIChpLCAxLCBuLCAxKSBpZiAoMCA8IG1hcmtbaV0gJiYgbWFya1tpXSA8IEJMKSBzdENvbG9yLnB1c2hfYmFjayhpKTsKCiAgICBoWzFdID0gMTsKICAgIGRmcygxKTsKICAgIHNhY2soMSwgZmFsc2UpOwogICAgLy8gdHJ1eSB2YW4gMwogICAgZm9yIChRdWVyeTMgJnEgOiBxcjMpIHsKICAgICAgICBpbnQgdSA9IHEudSwgdiA9IHEudjsKICAgICAgICBpbnQgcCA9IGxjYSh1LCB2KTsKICAgICAgICBpbnQgc3ogPSBoW3VdICsgaFt2XSAtIDIgKiBoW3BdICsgMTsKICAgICAgICBhbnNbcS5pZF0gPSAtMTsKCiAgICAgICAgaWYgKHN6IDw9IEJMICogMikKICAgICAgICAgICAgYW5zW3EuaWRdID0gcGF0aENvbCh1LCB2LCBwLCBzeik7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGZvciAoaW50IGNvbCA6IGNvbEJMKSB7CiAgICAgICAgICAgICAgICBpbnQgY0lEID0gY29sSURbY29sXTsKICAgICAgICAgICAgICAgIGludCB2YWwgPSBmW3VdW2NJRF0gKyBmW3ZdW2NJRF0gLSAyICogZltwXVtjSURdOwogICAgICAgICAgICAgICAgaWYgKGFbcF0gPT0gY29sKSArK3ZhbDsKCiAgICAgICAgICAgICAgICBpZiAodmFsID4gc3ogLyAyKSB7CiAgICAgICAgICAgICAgICAgICAgYW5zW3EuaWRdID0gY29sOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIEZPUiAoaSwgMSwgbSwgMSkgY291dCA8PCBhbnNbaV0gPDwgIlxuIjsKfQoKdm9pZCBpbnB1dCgpIHsKICAgIGNpbiA+PiBuID4+IG07CiAgICBGT1IgKGksIDEsIG4sIDEpIHsKICAgICAgICBjaW4gPj4gYVtpXTsKICAgICAgICArK21hcmtbYVtpXV07CiAgICAgICAgaWYgKG1hcmtbYVtpXV0gPT0gQkwpIGNvbEJMLnB1c2hfYmFjayhhW2ldKTsKICAgIH0KICAgIGludCB1LCB2LCB0eTsKICAgIEZPUiAoaSwgMiwgbiwgMSkgewogICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgYWRqW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICBhZGpbdl0ucHVzaF9iYWNrKHUpOwogICAgfQogICAgRk9SIChpLCAxLCBtLCAxKSB7CiAgICAgICAgY2luID4+IHR5OwogICAgICAgIGlmICh0eSA9PSAxIHx8IHR5ID09IDIpIHsKICAgICAgICAgICAgY2luID4+IHU7CiAgICAgICAgICAgIHFyMTJbdV0uZW1wbGFjZV9iYWNrKHR5LCBpKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgICAgIHFyMy5lbXBsYWNlX2JhY2sodSwgdiwgaSk7CiAgICAgICAgfQogICAgfQogICAgU29sdmUoKTsKfQoKCmludCBtYWluKCkgewogICAgb3BlbkZpbGUoIlRRVUVSWSIpOwogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBpbnB1dCgpOwoKICAgIC8vYm9vbCBtZW1vcnkyOwogICAgLy9jZXJyIDw8ICJcblxuXG5UaW1lOiAiPDwgMTAwMC4wICogY2xvY2soKSAvIENMT0NLU19QRVJfU0VDIDw8ICIgbXMiOwogICAgLy9jZXJyIDw8ICJcblxuXG5NZW1vcnk6ICI8PCBhYnMoJm1lbW9yeTEgLSAmbWVtb3J5MikgKiAxLjAgLyBNQVNLKDIwKSA8PCIgTUIiOwoKICAgIHJldHVybiAwOwp9Ci8vIG5oYW4wMTIzNDU2