#include<fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int v[1700000];
void insertarb(int pz,int val, int lf, int rh,int n){
if(lf==rh){v[n]=val;return;}
int mij=(lf+rh)/2;
if(pz<=mij)insertarb(pz,val,lf,mij,n<<1);
else insertarb(pz,val,mij+1,rh,(n<<1)+1);
v[n]=max(v[n<<1],v[(n<<1)+1]);
};
int querry(int a,int b, int lf, int rh, int n){
if(a<=lf&&b>=rh)return v[n];
int mij=(lf+rh)/2;
int nd=0,ns=0;
if(a<=mij)ns=querry(a,b,lf,mij,n<<1);
if(b>=mij+1)nd=querry(a,b,mij+1,rh,(n<<1)+1);
return max(nd,ns);
}
int main(){
int n,m,i,x,p,a,b;
fin>>n>>m;
for(i=1;i<=n;i++){
fin>>x;
insertarb(i,x,1,n,1);
}
for(i=1;i<=m;i++){
fin>>p>>a>>b;
if(p==0)fout<<querry(a,b,1,n,1)<<'\n';
if(p==1)insertarb(a,b,1,n,1);
}
fin.close();
fout.close();
return 0;
}