#include<stdio.h>
#include<stdlib.h>
int i,a[100001],b[100001],t,x,y,n,m,h,s,v[100001],f[100001],u[100001],l[100001],c[400004],r[100001],lv[100001],d[100001],z[100001];
int w[100001],*g[100001],*p[100001],oi[100001],oix,ru,j;
void D(int o) {
f[o]=w[o]=1;
int e=1,b=-1,i;
for(i=0;i<oi[o];i++)
if(!f[g[o][i]])
e=0,u[g[o][i]]=u[o]+1,D(g[o][i]),w[o]+=w[g[o][i]],b=(b==-1||w[g[o][i]]>w[b])?g[o][i]:b;
if(e) {
l[o]=++h,d[h]=1,p[h]=(int*)realloc(p[h],p[h][0]+2),p[h][++p[h][0]]=o;
return;
}
l[o]=l[b],d[l[o]]++,p[l[o]]=(int*)realloc(p[l[o]],p[l[o]][0]+2),p[l[o]][++p[l[o]][0]]=o;
for(i=0;i<oi[o];i++)
if(g[o][i]!=b&&u[g[o][i]]>=u[o])
r[l[g[o][i]]]=o,lv[l[g[o][i]]]=u[o];
}
void B(int o,int l,int r,int d,int z) {
if(l==r)
c[o+d]=v[p[z][l-1]];
else
B(o*2,l,(l+r)/2,d,z),B(o*2+1,(l+r)/2+1,r,d,z),c[o+d]=c[o*2+d]<c[o*2+1+d]?c[o*2+1+d]:c[o*2+d];
}
void U(int o,int l,int r,int z,int v,int d) {
if(l==r) {
c[o+d]=v;
return;
}
if(z<=(l+r)/2)
U(o*2,l,(l+r)/2,z,v,d);
else
U(o*2+1,(l+r)/2+1,r,z,v,d);
c[o+d]=c[o*2+d]<c[o*2+1+d]?c[o*2+1+d]:c[o*2+d];
}
int Q(int o,int l,int r,int e,int f,int d) {
if(e<=l&&r<=f)
return c[o+d];
int m=(l+r)/2,z=0,y;
if(e<=m)
z=z<(y=Q(o*2,l,m,e,f,d))?y:z;
if(m<f)
z=z<(y=Q(o*2+1,m+1,r,e,f,d))?y:z;
return z;
}
int main() {
freopen("heavypath.in","r",stdin),freopen("heavypath.out","w",stdout),scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",v+i);
for(i=1;i<n;++i)
scanf("%d%d",&a[i],&b[i]),oi[a[i]]++,oi[b[i]]++;
for(i=1;i<=n;oi[i++]=0)
g[i]=p[i]=(int*)malloc(oi[i]*sizeof(int));
for(i=1;i<n;i++)
g[a[i]][oi[a[i]]++]=b[i],g[b[i]][oi[b[i]]++]=a[i];
for(u[1]=i=1,D(1);i<=h;i++) {
for(j=1;j<=p[i][0]/2;j++)
oix=p[i][j],p[i][j]=p[i][p[i][0]-j+1],p[i][p[i][0]-j+1]=oix;
z[i]=i>1?(z[i-1]+d[i-1]*4):z[i],B(1,1,d[i],z[i],i);
}
while(m--) {
scanf("%d%d%d",&t,&x,&y);
if(!t)
U(1,1,d[l[x]],u[x]-lv[l[x]],y,z[l[x]]);
else {
while(1) {
if(l[x]==l[y]) {
if(u[x]>u[y])
oix=x,x=y,y=oix;
s=s<(ru=Q(1,1,d[l[x]],u[x]-lv[l[x]],u[y]-lv[l[x]],z[l[x]]))?ru:s;
break;
}
if(lv[l[x]]<lv[l[y]])
oix=x,x=y,y=oix;
s=s<(ru=Q(1,1,d[l[x]],1,u[x]-lv[l[x]],z[l[x]]))?ru:s,x=r[l[x]];
}
printf("%d\n",s),s=0;
}
}
}