#include <stdio.h>
#define maxn 100000
FILE *in=fopen("arbint.in","r"),*out=fopen("arbint.out","w");
int n,pos,val,start,final,arb[4*maxn+66],rez;
int maxim(int a,int b){
if(a>b)return a;
return b;
}
void update(int nod,int left,int right){
// fprintf(out,"(%d,%d,%d,%d)",left,div,div+1,right);
if(left==right){
arb[nod]=val;
return;
}
int div=(left+right)/2;
if(pos<=div) update(2*nod,left,div);
else update(2*nod+1,div+1,right);
arb[nod]=maxim(arb[2*nod],arb[2*nod+1]);
// fprintf(out,"(%d,%d,%d,%d)",left,div,div+1,right);
}
void interogare(int nod,int left,int right){
if(start<=left&&right<=final){
rez=maxim(rez,arb[nod]);
return;
}
int div=(left+right)/2;
if(start<=div) interogare(2*nod,left,div);
if(div<final)interogare(2*nod+1,div+1,right);
// fprintf(out,"(%d,%d,%d,%d)<%d,%d>",left,div,div+1,right,arb[2*nod],arb[2*nod+1]);
}
void solve(){
int i,x,m;
fscanf(in,"%d%d",&n,&m);
for(i=1;i<=n;i++){
fscanf(in,"%d",&x);
val=x;
pos=i;
update(1,1,n);
// fprintf(out,"\n");
}
while(m--){
int a,b,c;
fscanf(in,"%d%d%d",&a,&b,&c);
if(a==0){
rez=-1;
start=b;
final=c;
interogare(1,1,n);
fprintf(out,"%d\n",rez);
}
else{
pos=b;
val=c;
update(1,1,n);
}
}
}
int main(){
solve();
fclose(in);
fclose(out);
return 0;
}