#include <bits/stdc++.h>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout("arbint.out");
const int dim=100009;
int n,m;
int v[dim],aint[4*dim];
void Update(int nod,int st,int dr,int pos,int val){
if(st==dr){
aint[nod]=val;
return;
}
int mij=(st+dr)/2;
if(pos<=mij)
Update(2*nod,st,mij,pos,val);
else
Update(2*nod+1,mij+1,dr,pos,val);
aint[nod]=max(aint[2*nod],aint[2*nod+1]);
}
int Query(int nod,int st,int dr,int l,int r){
if(st==l&&dr==r)
return aint[nod];
int mij=(st+dr)/2;
if(r<=mij)
return Query(2*nod,st,mij,l,r);
else
if(l>=mij+1)
return Query(2*nod+1,mij+1,dr,l,r);
else
return max(Query(2*nod,st,mij,l,mij),Query(2*nod+1,mij+1,dr,mij+1,r));
}
signed main(){
fin>>n>>m;
for(int i=1;i<=n;i++){
fin>>v[i];
Update(1,1,n,i,v[i]);
}
for(int i=1;i<=m;i++){
int c;
fin>>c;
if(c==1){
int pos,val;
cin>>pos>>val;
Update(1,1,n,pos,val);
}
if(c==0){
int st,dr;
fin>>st>>dr;
if(st>dr)
swap(st,dr);
fout<<Query(1,1,n,st,dr)<<'\n';
}
}
}