#include <fstream>
using namespace std;
FILE *f = fopen("arbint.in","r");
FILE *g = fopen("arbint.out","w");
long long arb[1<<19],n,m,i,x,y,z,maxim;
void query(long nod,long st,long dr,long long a,long long b){
if(a<=st && dr<=b){
if(maxim<=arb[nod])
maxim=arb[nod];
return ;
}
long long mij=(st+dr)/2;
if(a<=mij) query(2*nod,st,mij,a,b);
if(b>=mij+1) query(2*nod+1,mij+1,dr,a,b);
}
void update(long long nod,long long st,long long dr,long long poz,long long val){
if(st==dr){
arb[nod]=val;
return ;
}
long long mij=(st+dr)/2;
if(poz<=mij) update(2*nod,st,mij,poz,val);
else update(2*nod+1,mij+1,dr,poz,val);
arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
int main()
{
fscanf(f,"%lld %lld", &n,&m);
for(i=1;i<=n;i++){
fscanf(f,"%lld", &x);
update(1,1,n,i,x);
}
for(i=1;i<=m;i++){
fscanf(f,"%lld %lld %lld", &x,&y,&z);
if(x==0){
maxim=0;
query(1,1,n,y,z);
fprintf(g,"%lld\n",maxim);
}
else
update(1,1,n,y,z);
}
return 0;
}