#include <cstdio>
FILE*f=fopen("arbint.in","r");
FILE*h=fopen("arbint.out","w");
int t[2<<19],k;
inline int max(int a,int b){
if ( a>b )return a;
return b;
}
inline void update(int p,int st,int dr,int poz,int val){
if ( st==dr ){t[p]=val;return;}
int m=(st+dr)>>1;
if ( poz<=m )update(p<<1,st,m,poz,val);
else update((p<<1)+1,m+1,dr,poz,val);
t[p]=max(t[p<<1],t[(p<<1)+1]);
}
inline void query(int p,int st,int dr,int a,int b){
if ( a<=st&&dr<=b ){k=max(k,t[p]);return;};
int m=(st+dr)>>1;
if ( a<=m ){query(p<<1,st,m,a,b);}
if ( m+1<=b ){query((p<<1)+1,m+1,dr,a,b);}
}
int main()
{
int n,m;
fscanf(f,"%d%d",&n,&m);
for ( int i=1;i<=n;++i ){
int a;
fscanf(f,"%d",&a);
update(1,1,n,i,a);
}
for ( int i=1;i<=m;++i ){
int s,a,b;
fscanf(f,"%d%d%d",&s,&a,&b);
if ( s==0 ){k=0;query(1,1,n,a,b);fprintf(h,"%d\n",k);}
else update(1,1,n,a,b);
}
return 0;
}