#include<cstdio>
#include<cstring>
int n,m,op,a,b,v[400100],l,nr;
char s[2000000];
FILE *f,*g;
/*int maxim(int a,int b){
if(a>b)
return a;
return b;
}*/
void ad(int nod,int st,int dr){
if(st==dr&&st==a){
v[nod]=b;
return;
}
int mid=((st+dr)>>1);
if(a<=mid)
ad((nod<<1),st,mid);
if(a>mid)
ad((nod<<1)+1,mid+1,dr);
if(v[(nod<<1)]>v[(nod<<1)+1])
v[nod]=v[(nod<<1)];
else
v[nod]=v[(nod<<1)+1];
//v[nod]=maxim(v[(nod<<1)],v[(nod<<1)+1]);
}
int query(int nod,int st,int dr){
int qs=0,qd=0,mid,nn;
if(a<=st&&dr<=b)
return v[nod];
mid=((st+dr)>>1);
if(a<=mid)
qs=query((nod<<1),st,mid);
if(mid<b)
qd=query((nod<<1)+1,mid+1,dr);
if(qs>qd)
return qs;
else
return qd;
// return maxim(qs,qd);
}
int main(){
f=fopen("arbint.in","r");
g=fopen("arbint.out","w");
fscanf(f,"%d%d\n",&n,&m);
/* for(i=1;i<=2*n;i++){
v[i]=-2000000000;
}*/
register int i;
/*fgets(s,5000000,f);
l=strlen(s);
nr=0;
for(i=0;i<l;i++){
if(s[i]>='0'&&s[i]<='9')
b=b*10+s[i]-'0';
else{
nr++;
a=nr;
ad(1,1,n);
b=0;
}
}*/
for(i=1;i<=n;i++){
fscanf(f,"%d",&a);
b=a;
a=i;
ad(1,1,n);
}
for(i=1;i<=m;i++){
fscanf(f,"%d%d%d",&op,&a,&b);
if(op==1){
ad(1,1,n);
}
else{
fprintf(g,"%d\n",query(1,1,n));
}
}
fclose(f);
fclose(g);
return 0;
}