#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define len(s) (int)s.size()
#define pb push_back
#define eb emplace_back
#define Fi first
#define Se second
#define MASK(x) ((1LL)<<(x))
#define Bit(x,i) (((x)>>(i))&(1))
#define CountBit(x) __builtin_popcountll(x)
#define ii pair<int,int>
#define OpenFile(Name) if (fopen(Name".inp","r")) freopen(Name".inp","r",stdin),freopen(Name".out","w",stdout);
using namespace std;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
template <class C> bool Minimize(C &a, C b) { if (a>b) { a=b; return true; } return false;}
template <class C> bool Maximize(C &a, C b) { if (a<b) { a=b; return true; } return false;}
inline ll add(ll a,ll b,ll c) { return (a+b)%c; };
inline ll sub(ll a,ll b,ll c) { return (a-b+c)%c; };
inline ll mul(ll a,ll b,ll c) { return ((a%c)*(b%c))%c; };
ll K=1e18,MOD=1e9+7,MOD_base=1777777777;
const int N=1e5+5,M=1e3+3,base=31,BL=447;
///____________________________________________________________________________________________________________________________
int color[N],tin[N],tout[N],Node[N],cnt=0,dem[N];
vector<int> a[N];
int n;
void DFS(int u,int p=-1) {
tin[u]=++cnt;
Node[cnt]=u;
for (int v:a[u])
if (v!=p) DFS(v,u);
tout[u]=cnt;
}
int check1(int l,int r) {
int tmp=0,res=0;
for (int i=l;i<=r;++i) {
int u=Node[i];
dem[color[u]]++;
if (dem[color[u]]>tmp) {
tmp=dem[color[u]];
res=color[u];
}
//tmp=max(tmp,dem[color[u]]);
}
for (int i=l;i<=r;++i) dem[color[Node[i]]]=0;
if (tmp>((r-l+1)/2)) return res;
return -1;
}
bool vis[N];
int check2(int l,int r) {
for (int i=l;i<=r;++i) vis[Node[i]]=1;
int tmp=0,res=0,t=0;
for (int i=1;i<=n;++i)
if (!vis[Node[i]]) {
int u=Node[i];
dem[color[u]]++;
if (dem[color[u]]>tmp) {
tmp=dem[color[u]];
res=color[u];
}
t++;
//tmp=max(tmp,dem[color[u]]);
}
for (int i=l;i<=r;++i) dem[color[Node[i]]]=0;
for (int i=l;i<=r;++i) vis[Node[i]]=0;
//cout<<"truy van 2: "<<(r-l+1)/2<<' '<<tmp<<'\n';
if (tmp>t/2) return res;
return -1;
}
int b[N],d=0;
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
OpenFile("TQUERY");
int q; cin>>n>>q;
for (int i=1;i<=n;++i) cin>>color[i];
for (int i=1;i<n;++i) {
int u,v; cin>>u>>v;
a[u].eb(v);
a[v].eb(u);
}
DFS(1);
//for (int i=1;i<=n;++i) cout<<i<<' '; cout<<'\n';
//for (int i=1;i<=n;++i) cout<<Node[i]<<' '; cout<<'\n';
//for (int i=1;i<=n;++i) cout<<tin[i]<<' '; cout<<'\n';
//for (int i=1;i<=n;++i) cout<<tout[i]<<' '; cout<<'\n';
while (q--) {
int op,u; cin>>op>>u;
//cout<<op<<' '<<u<<'\n';
if (op==1) {
int k=check1(tin[u],tout[u]);
cout<<k<<'\n';
} else
if (op==2) {
int k=check2(tin[u],tout[u]);
cout<<k<<'\n';
} else
if (op==3) {
int v; cin>>v;
cout<<-1<<'\n';
}
}
cerr<<"\nBien dich thanh cong\nTime: "<<(1.0*clock()/CLOCKS_PER_SEC)<<" s\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBsZW4ocykgKGludClzLnNpemUoKQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGViIGVtcGxhY2VfYmFjawojZGVmaW5lIEZpIGZpcnN0CiNkZWZpbmUgU2Ugc2Vjb25kCiNkZWZpbmUgTUFTSyh4KSAgKCgxTEwpPDwoeCkpCiNkZWZpbmUgQml0KHgsaSkgKCgoeCk+PihpKSkmKDEpKQojZGVmaW5lIENvdW50Qml0KHgpICBfX2J1aWx0aW5fcG9wY291bnRsbCh4KQojZGVmaW5lIGlpIHBhaXI8aW50LGludD4KI2RlZmluZSBPcGVuRmlsZShOYW1lKSBpZiAoZm9wZW4oTmFtZSIuaW5wIiwiciIpKSBmcmVvcGVuKE5hbWUiLmlucCIsInIiLHN0ZGluKSxmcmVvcGVuKE5hbWUiLm91dCIsInciLHN0ZG91dCk7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgZHhbNF09ezAsMSwwLC0xfTsKaW50IGR5WzRdPXsxLDAsLTEsMH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQz4gYm9vbCBNaW5pbWl6ZShDICZhLCBDIGIpIHsgaWYgKGE+YikgeyBhPWI7IHJldHVybiB0cnVlOyB9IHJldHVybiBmYWxzZTt9CnRlbXBsYXRlIDxjbGFzcyBDPiBib29sIE1heGltaXplKEMgJmEsIEMgYikgeyBpZiAoYTxiKSB7IGE9YjsgcmV0dXJuIHRydWU7IH0gcmV0dXJuIGZhbHNlO30KCmlubGluZSBsbCBhZGQobGwgYSxsbCBiLGxsIGMpIHsgcmV0dXJuIChhK2IpJWM7IH07CmlubGluZSBsbCBzdWIobGwgYSxsbCBiLGxsIGMpIHsgcmV0dXJuIChhLWIrYyklYzsgfTsKaW5saW5lIGxsIG11bChsbCBhLGxsIGIsbGwgYykgeyByZXR1cm4gKChhJWMpKihiJWMpKSVjOyB9OwoKbGwgSz0xZTE4LE1PRD0xZTkrNyxNT0RfYmFzZT0xNzc3Nzc3Nzc3Owpjb25zdCBpbnQgTj0xZTUrNSxNPTFlMyszLGJhc2U9MzEsQkw9NDQ3OwoKLy8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwoKCmludCBjb2xvcltOXSx0aW5bTl0sdG91dFtOXSxOb2RlW05dLGNudD0wLGRlbVtOXTsKdmVjdG9yPGludD4gYVtOXTsKaW50IG47Cgp2b2lkIERGUyhpbnQgdSxpbnQgcD0tMSkgewogICAgdGluW3VdPSsrY250OwogICAgTm9kZVtjbnRdPXU7CgogICAgZm9yIChpbnQgdjphW3VdKQogICAgaWYgKHYhPXApIERGUyh2LHUpOwoKICAgIHRvdXRbdV09Y250Owp9CgppbnQgY2hlY2sxKGludCBsLGludCByKSB7CiAgICBpbnQgdG1wPTAscmVzPTA7CgogICAgZm9yIChpbnQgaT1sO2k8PXI7KytpKSB7CiAgICAgICAgaW50IHU9Tm9kZVtpXTsKICAgICAgICBkZW1bY29sb3JbdV1dKys7CiAgICAgICAgaWYgKGRlbVtjb2xvclt1XV0+dG1wKSB7CiAgICAgICAgICAgIHRtcD1kZW1bY29sb3JbdV1dOwogICAgICAgICAgICByZXM9Y29sb3JbdV07CiAgICAgICAgfQogICAgICAgIC8vdG1wPW1heCh0bXAsZGVtW2NvbG9yW3VdXSk7CiAgICB9CgogICAgZm9yIChpbnQgaT1sO2k8PXI7KytpKSBkZW1bY29sb3JbTm9kZVtpXV1dPTA7CgogICAgaWYgKHRtcD4oKHItbCsxKS8yKSkgcmV0dXJuIHJlczsKICAgIHJldHVybiAtMTsKfQoKYm9vbCB2aXNbTl07CgppbnQgY2hlY2syKGludCBsLGludCByKSB7CiAgICBmb3IgKGludCBpPWw7aTw9cjsrK2kpIHZpc1tOb2RlW2ldXT0xOwoKICAgIGludCB0bXA9MCxyZXM9MCx0PTA7CgogICAgZm9yIChpbnQgaT0xO2k8PW47KytpKQogICAgaWYgKCF2aXNbTm9kZVtpXV0pIHsKICAgICAgICBpbnQgdT1Ob2RlW2ldOwogICAgICAgIGRlbVtjb2xvclt1XV0rKzsKICAgICAgICBpZiAoZGVtW2NvbG9yW3VdXT50bXApIHsKICAgICAgICAgICAgdG1wPWRlbVtjb2xvclt1XV07CiAgICAgICAgICAgIHJlcz1jb2xvclt1XTsKICAgICAgICB9CiAgICAgICAgdCsrOwogICAgICAgIC8vdG1wPW1heCh0bXAsZGVtW2NvbG9yW3VdXSk7CiAgICB9CgogICAgZm9yIChpbnQgaT1sO2k8PXI7KytpKSBkZW1bY29sb3JbTm9kZVtpXV1dPTA7CiAgICBmb3IgKGludCBpPWw7aTw9cjsrK2kpIHZpc1tOb2RlW2ldXT0wOwoKICAgIC8vY291dDw8InRydXkgdmFuIDI6ICI8PChyLWwrMSkvMjw8JyAnPDx0bXA8PCdcbic7CgogICAgaWYgKHRtcD50LzIpIHJldHVybiByZXM7CiAgICByZXR1cm4gLTE7Cn0KCmludCBiW05dLGQ9MDsKCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogICAgT3BlbkZpbGUoIlRRVUVSWSIpOwoKICAgIGludCBxOyBjaW4+Pm4+PnE7CiAgICBmb3IgKGludCBpPTE7aTw9bjsrK2kpIGNpbj4+Y29sb3JbaV07CgogICAgZm9yIChpbnQgaT0xO2k8bjsrK2kpIHsKICAgICAgICBpbnQgdSx2OyBjaW4+PnU+PnY7CiAgICAgICAgYVt1XS5lYih2KTsKICAgICAgICBhW3ZdLmViKHUpOwogICAgfQoKICAgIERGUygxKTsKCiAgICAvL2ZvciAoaW50IGk9MTtpPD1uOysraSkgY291dDw8aTw8JyAnOyBjb3V0PDwnXG4nOwogICAgLy9mb3IgKGludCBpPTE7aTw9bjsrK2kpIGNvdXQ8PE5vZGVbaV08PCcgJzsgY291dDw8J1xuJzsKICAgIC8vZm9yIChpbnQgaT0xO2k8PW47KytpKSBjb3V0PDx0aW5baV08PCcgJzsgY291dDw8J1xuJzsKICAgIC8vZm9yIChpbnQgaT0xO2k8PW47KytpKSBjb3V0PDx0b3V0W2ldPDwnICc7IGNvdXQ8PCdcbic7CgoKICAgIHdoaWxlIChxLS0pIHsKICAgICAgICBpbnQgb3AsdTsgY2luPj5vcD4+dTsKCiAgICAgICAgLy9jb3V0PDxvcDw8JyAnPDx1PDwnXG4nOwogICAgICAgIGlmIChvcD09MSkgewogICAgICAgICAgICBpbnQgaz1jaGVjazEodGluW3VdLHRvdXRbdV0pOwogICAgICAgICAgICBjb3V0PDxrPDwnXG4nOwogICAgICAgIH0gZWxzZQogICAgICAgIGlmIChvcD09MikgewogICAgICAgICAgICBpbnQgaz1jaGVjazIodGluW3VdLHRvdXRbdV0pOwogICAgICAgICAgICBjb3V0PDxrPDwnXG4nOwogICAgICAgIH0gZWxzZQogICAgICAgIGlmIChvcD09MykgewogICAgICAgICAgICBpbnQgdjsgY2luPj52OwogICAgICAgICAgICBjb3V0PDwtMTw8J1xuJzsKICAgICAgICB9CiAgICB9CgoKCiAgICBjZXJyPDwiXG5CaWVuIGRpY2ggdGhhbmggY29uZ1xuVGltZTogIjw8KDEuMCpjbG9jaygpL0NMT0NLU19QRVJfU0VDKTw8IiBzXG4iOwogICAgcmV0dXJuIDA7Cn0K