#include <stdio.h>
#define N 100005
int n,m;
int a[4*N+66];
int s, f, v, p, maxim;
inline int max(int a,int b){
if(a>b)
return a;
return b;
}
void Update(int nod,int l,int r){
if(l==r){
a[nod]=v;
return;
}
int d=(l+r)/2;
if(p<=d)
Update(2*nod,l,d);
else
Update(2*nod+1,d+1,r);
a[nod]=max(a[2*nod],a[2*nod+1]);
}
void Query(int nod, int l, int r){
if(s<=l&&r<=f){
if(maxim<a[nod])
maxim=a[nod];
return;
}
int d=(l+r)/2;
if(s<=d)
Query(2*nod,l,d);
if(f>d)
Query(2*nod+1,d+1,r);
}
int main(){
int X,A,B,i;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d", &n, &m);
for(i=1;i<=n;++i){
scanf("%d", &X);
p=i, v=X;
Update(1,1,n);
}
for(i=1;i<=m;++i){
scanf("%d%d%d",&X,&A,&B);
if(X==0){
maxim=-1;
s=A,f=B;
Query(1,1,n);
printf("%d\n", maxim);
}
else{
p=A, v=B;
Update(1,1,n);
}
}
}