#include <stdio.h>
#define in "arbint.in"
#define out "arbint.out"
#define dim 100001
FILE *f=fopen(in,"r"),*g=fopen(out,"w");
int m,n,maxarb[4*dim+66];
int start,finish,val,pos,maxim;
int Maxim(int a,int b){
if(a>b) return a;
return b;
}
void actualizare(int,int,int);
void interogare(int,int,int);
int main(){
int x,a,b,i;
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;i++){
fscanf(f,"%d",&x);
pos=i;
val=x;
actualizare(1,1,n);
}
for(i=1;i<=m;i++){
fscanf(f,"%d%d%d",&x,&a,&b);
if(!x){
maxim=-1;
start=a,finish=b;
interogare(1,1,n);
fprintf(g,"%d\n",maxim);
}
else{
pos=a;
val=b;
actualizare(1,1,n);
}
}
fclose(f);
fclose(g);
return 0;
}
void actualizare(int nod,int stanga,int dreapta){
if(stanga==dreapta){
maxarb[nod]=val;
return;
}
int div;
div=(stanga+dreapta)/2;
if(pos<=div) actualizare(2*nod,stanga,div);
else actualizare(2*nod+1,div+1,dreapta);
maxarb[nod]=Maxim(maxarb[2*nod],maxarb[2*nod+1]);
}
void interogare(int nod,int stanga,int dreapta){
if(start<=stanga&&dreapta<=finish){
maxim=Maxim(maxim,maxarb[nod]);
return;
}
int div;
div=(stanga+dreapta)/2;
if(start<=div) interogare(2*nod,stanga,div);
if(div<finish) interogare(2*nod+1,div+1,dreapta);
}