#include <stdio.h>
#include <stdlib.h>
#define N 100010
int n,m;
int v[N];
int arb[5*N];
int val,pos,start,finish,maxim;
int max(int a,int b){
if (a>b)
return a;
return b;
}
void update(int i,int l,int r){
int div;
if (l==r){
arb[i]=val;
return;
}
div=(l+r)/2;
if (pos<=div) update(2*i,l,div);
else update(2*i+1,div+1,r);
arb[i]=max(arb[2*i],arb[2*i+1]);
}
void querry(int i,int l,int r){
int div;
if (start<=l && r<=finish){
if (maxim<arb[i])
maxim=arb[i];
return;
}
div=(l+r)/2;
if (start<=div)querry(2*i,l,div);
if (div<finish)querry(2*i+1,div+1,r);
}
int main(void){
int i,a,b,x;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=1;i<=n;++i){
scanf("%d",&x);
pos=i;
val=x;
update(1,1,n);
}
while (m--){
scanf("%d%d%d",&x,&a,&b);
if (x==0){
maxim=-1;
start=a;
finish=b;
querry(1,1,n);
printf("%d\n",maxim);
}
else{
pos=a;
val=b;
update(1,1,n);
}
}
return 0;
}