#include <bits/stdc++.h>
using namespace std;
int n,q,timer=0,a[400005],tin[400005],tout[400005],arr[800005],bit[67][800005];
vector <int> ve[400005];
void DFS(int u, int p)
{
tin[u]=++timer;
for (int v : ve[u]) if (v!=p) DFS(v,u);
tout[u]=++timer;
}
void UPDATE(int id, int i, int v)
{
while (i<=timer) bit[id][i]+=v,i+=i&(-i);
return;
}
int GET(int id, int l, int r)
{
l--;
int resl=0,resr=0;
while (l>0) resl+=bit[id][l],l-=l&(-l);
while (r>0) resr+=bit[id][r],r-=r&(-r);
return resr-resl;
}
signed main()
{
ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>q;
for (int i=1;i<=n;i++) cin>>a[i];
for (int i=1;i<n;i++)
{
int u,v;
cin>>u>>v;
ve[u].push_back(v),ve[v].push_back(u);
}
DFS(1,0);
for (int i=1;i<=n;i++) UPDATE(a[i],tin[i],1),UPDATE(a[i],tout[i],1);
for (int i=1;i<=q;i++)
{
int t;
cin>>t;
if (t==1)
{
int u,c;
cin>>u>>c;
UPDATE(a[u],tin[u],-1),UPDATE(a[u],tout[u],-1);
a[u]=c,UPDATE(c,tin[u],1),UPDATE(c,tout[u],1);
}
else
{
int pa,ans=0;
cin>>pa;
for (int i=1;i<=60;i++) if (GET(i,tin[pa],tout[pa])>0) ans++;
cout<<ans<<'\n';
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBuLHEsdGltZXI9MCxhWzQwMDAwNV0sdGluWzQwMDAwNV0sdG91dFs0MDAwMDVdLGFycls4MDAwMDVdLGJpdFs2N11bODAwMDA1XTsKdmVjdG9yIDxpbnQ+IHZlWzQwMDAwNV07CnZvaWQgREZTKGludCB1LCBpbnQgcCkKewogICAgdGluW3VdPSsrdGltZXI7CiAgICBmb3IgKGludCB2IDogdmVbdV0pIGlmICh2IT1wKSBERlModix1KTsKICAgIHRvdXRbdV09Kyt0aW1lcjsKfQp2b2lkIFVQREFURShpbnQgaWQsIGludCBpLCBpbnQgdikKewogICAgd2hpbGUgKGk8PXRpbWVyKSBiaXRbaWRdW2ldKz12LGkrPWkmKC1pKTsKICAgIHJldHVybjsKfQppbnQgR0VUKGludCBpZCwgaW50IGwsIGludCByKQp7CiAgICBsLS07CiAgICBpbnQgcmVzbD0wLHJlc3I9MDsKICAgIHdoaWxlIChsPjApIHJlc2wrPWJpdFtpZF1bbF0sbC09bCYoLWwpOwogICAgd2hpbGUgKHI+MCkgcmVzcis9Yml0W2lkXVtyXSxyLT1yJigtcik7CiAgICByZXR1cm4gcmVzci1yZXNsOwp9CnNpZ25lZCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSksY2luLnRpZSgwKSxjb3V0LnRpZSgwKTsKICAgIGNpbj4+bj4+cTsKICAgIGZvciAoaW50IGk9MTtpPD1uO2krKykgY2luPj5hW2ldOwogICAgZm9yIChpbnQgaT0xO2k8bjtpKyspCiAgICB7CiAgICAgICAgaW50IHUsdjsKICAgICAgICBjaW4+PnU+PnY7CiAgICAgICAgdmVbdV0ucHVzaF9iYWNrKHYpLHZlW3ZdLnB1c2hfYmFjayh1KTsKICAgIH0KICAgIERGUygxLDApOwogICAgZm9yIChpbnQgaT0xO2k8PW47aSsrKSBVUERBVEUoYVtpXSx0aW5baV0sMSksVVBEQVRFKGFbaV0sdG91dFtpXSwxKTsKICAgIGZvciAoaW50IGk9MTtpPD1xO2krKykKICAgIHsKICAgICAgICBpbnQgdDsKICAgICAgICBjaW4+PnQ7CiAgICAgICAgaWYgKHQ9PTEpCiAgICAgICAgewogICAgICAgICAgICBpbnQgdSxjOwogICAgICAgICAgICBjaW4+PnU+PmM7CiAgICAgICAgICAgIFVQREFURShhW3VdLHRpblt1XSwtMSksVVBEQVRFKGFbdV0sdG91dFt1XSwtMSk7CiAgICAgICAgICAgIGFbdV09YyxVUERBVEUoYyx0aW5bdV0sMSksVVBEQVRFKGMsdG91dFt1XSwxKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaW50IHBhLGFucz0wOwogICAgICAgICAgICBjaW4+PnBhOwogICAgICAgICAgICBmb3IgKGludCBpPTE7aTw9NjA7aSsrKSBpZiAoR0VUKGksdGluW3BhXSx0b3V0W3BhXSk+MCkgYW5zKys7CiAgICAgICAgICAgIGNvdXQ8PGFuczw8J1xuJzsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKfQ==