#include<stdio.h>
#define NMAX 100000
#define MMAX 3*NMAX
int max;
void qry(int nod,int ls,int ld,int a,int b,int x[]){
int mij;
if(a<=ls&&ld<=b){
if(max<x[nod]) max=x[nod];
}
else{
mij=(ls+ld)/2;
if(a<=mij) qry(nod*2,ls,mij,a,b,x);
if(mij<b) qry(nod*2+1,mij+1,ld,a,b,x);
}
}
int main(){
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int n,m,i,j,k,v[NMAX+1]={0},w[MMAX+1]={0},tip,a,b;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++) scanf("%d",&v[i]);
int ii,jj,mij;
for(i=1;i<=n;i++){
ii=1;jj=n;k=1;
while(ii<=jj){
if(ii==jj) {
w[k]=v[i];
k=k/2;
while(k){
if(k)
if(w[2*k]>w[2*k+1]) w[k]=w[2*k];
else w[k]=w[2*k+1];
k/=2;
}
break;
}
else{
mij=(ii+jj)/2;
if(i<=mij){
k=2*k;jj=mij;
}
else{
k=2*k+1;ii=mij+1;
}
}
}
}
for(j=0;j<m;j++){
scanf("%d%d%d",&tip,&a,&b);
if(tip==0){
max=0;
qry(1,1,n,a,b,w);
printf("%d\n",max);
}
else{
ii=1;jj=n;k=1;
while(ii<=jj){
if(ii==jj) {
w[k]=b;
k=k/2;
while(k){
if(k)
if(w[2*k]>w[2*k+1]) w[k]=w[2*k];
else w[k]=w[2*k+1];
k/=2;
}
break;
}
else{
mij=(ii+jj)/2;
if(a<=mij){
k=2*k;jj=mij;
}
else{
k=2*k+1;ii=mij+1;
}
}
}
v[a]=b;
}
}
return 0;
}