#include <stdio.h>
#define N 100001
int n,m,t[3*N],poz,val,sol,a,b,x;
void actual(int p,int u,int i){
if(p==u){
t[i]=val;
return ;
}
int m=(p+u)>>1;
if(poz<=m) actual(p,m,2*i);
else actual(m+1,u,2*i+1);
if(t[2*i]>t[2*i+1])
t[i]=t[2*i];
else t[i]=t[2*i+1];
}
void maxim(int p,int u,int i){
if(a<=p && u<=b){
if(t[i]>sol) sol=t[i];
return ;
}
int m=(p+u)>>1;
if(a<=m)
maxim(p,m,2*i);
if(b>m)
maxim(m+1,u,2*i+1);
}
int main(){
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&val);
poz=i;
actual(1,n,1);
}
for(int i=1;i<=m;i++){
scanf("%d%d%d",&x,&a,&b);
sol=0;
if(x==0) {
maxim(1,n,1);
printf("%d\n",sol);
}
else {
poz=a;
val=b;
actual(1,n,1);
}
}
return 0;
}