#include <stdio.h>
#define Maxim(a,b) ((a>b)?a:b)
long H[400100],val_maxim;
long x,y,poz;
void Modify(long nod,long left,long right){
if (left==right)
H[nod]=y;
else{
long mid=(left+right)/2;
if (poz<=mid)
Modify(2*nod,left,mid);
else Modify(2*nod+1,mid+1,right);
H[nod]=Maxim(H[2*nod], H[2*nod+1]);
}
}
void Get_Max(long nod,long left,long right){
if (x<=left && right<=y){
if (val_maxim<H[nod]) val_maxim=H[nod];
}
else{
long mid=(left+right)/2;
if (x <= mid) Get_Max(2*nod,left,mid);
if (mid < y) Get_Max(2*nod+1,mid+1,right);
}
}
int main(){
long N,M,i,op;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%ld %ld", &N, &M);
for (i=1;i<=N;i++){
scanf("%ld",&y);
poz=i;
Modify(1,1,N);
}
for (;M;M--){
scanf("%ld %ld %ld",&op,&x,&y);
if (op==0){
val_maxim= -10000;
Get_Max(1,1,N);
printf("%ld\n",val_maxim);
}
else{
poz=x;
Modify(1,1,N);
}
}
}