#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1e5 + 7;
int n,m,t;
int a[NMAX], aint[NMAX*4];
void build(int b, int e, int i){
if(b==e){
aint[i]=a[b];
return;
}
int mij = (b+e)/2;
build(b,mij,2*i);
build(mij+1,e,2*i+1);
aint[i]=max(aint[2*i],aint[2*i+1]);
}
void update(int b, int e, int i, int j, int v){
if(b==e){
aint[i]=v;
return;
}
int mij = (b+e)/2;
if(j<=mij)
update(b,mij,2*i,j,v);
else
update(mij+1,e,2*i+1,j,v);
aint[i]=max(aint[2*i],aint[2*i+1]);
}
int query(int b, int e, int i, int l, int r){
if(l<=b&&e<=r){
return aint[i];
}
int mij = (b+e)/2;
if(r<=mij){
return query(b,mij,2*i,l,r);
}else if(l>=mij+1){
return query(mij+1,e,2*i+1,l,r);
}
return max(query(b,mij,2*i,l,r),query(mij+1,e,2*i+1,l,r));
}
main(){
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
build(1,n,1);
int a,b;
while(m--){
cin>>t;
if(t==0){
cin>>a>>b;
cout<<query(1,n,1,a,b)<<'\n';
}else{
cin>>a>>b;
update(1,n,1,a,b);
}
}
}