#include<stdio.h>
int n,m,poz,val,in,sf,a[100],maxim;
void update(int nod, int st,int dr)
{ if(st==dr) { a[nod]=val;
return;
}
int mij=(st+dr)/2;
if(poz<=mij) update(2*nod,st,mij);
else update(2*nod+1,mij+1,dr);
a[nod]=a[2*nod]>a[2*nod+1] ? a[2*nod]:a[2*nod+1];
}
void query(int nod,int st,int dr)
{ if(in<=st && dr<=sf)
{ if(maxim<a[nod]) a[nod]=maxim;
return;
}
int mij=(st+dr)/2;
if(in<=mij) query(2*nod,st,mij);
if(mij<sf) query(2*nod+1,mij+1,dr);
}
int main()
{ freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
int i,x;
for(i=1;i<=n;i++)
{ scanf("%d",&x);
poz=i;
val=x;
update(1,1,n);
}
for(i=1;i<=m;i++)
{ scanf("%d%d%d",&x,&in,&sf);
if(x)
{ poz=in;
val=sf;
update(1,1,n);
}
else { maxim=-1;
query(1,1,n);
printf("%d\n",maxim);
}
}
return 0;
}