#include<stdio.h>
#define N 100002
#define max(a,b) a>b?a:b
int n,m,v[N],t[4*N],x,y,rez,mij;
void cons(int st, int dr, int poz){
if(st==dr){
v[st]=poz;
return ;
}
int q=(st+dr)/2;
cons(st,q,2*poz);
cons(q+1,dr,2*poz+1);
}
void update(int p, int val){
int q=v[p];
t[q]=val;
q/=2;
while(q){
t[q]=max(t[q * 2], t[q*2+1]);
q/=2;
}
}
void query(int st,int dr,int poz){
if(st>y || dr<x)
return ;
if(st>=x && dr<=y)
rez=max(rez,t[poz]);
else
if(st<dr){
int q=(st + dr)/2;
query(st,q,2*poz);
query(q+1,dr,2*poz+1);
}
}
int main () {
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int a;
scanf("%d%d",&n,&m);
cons(1,n,1);
for(int i=1;i<=n;++i){
scanf("%d",&x);
update(i,x);
}
for(int i=1; i<=m;++i){
scanf("%d%d%d",&a,&x,&y);
if(a)
update(x,y);
else{
rez=0;
query(1,n,1);
printf("%d\n",rez);
}
}
return 0;
}