#include<fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n,m,arb[400005],x,y,op,maxim;
void SeekElements(int node,int left,int right){
if(left==right){
cout<<arb[node]<<' ';
return ;
}
int middle=(left+right)/2;
SeekElements(2*node,left,middle);
SeekElements(2*node+1,middle+1,right);
if(node==1) cout<<'\n';
}
void Update(int node,int left,int right,int index,int value){
if(left==right){
arb[node]=value;
return ;
}
int middle=(left+right)/2;
if(index<=middle)
Update(2*node,left,middle,index,value);
else
Update(2*node+1,middle+1,right,index,value);
arb[node]=max(arb[2*node],arb[2*node+1]);
}
void Query(int node,int left,int right,int a,int b){
if(a<=left && right<=b){
maxim=max(maxim,arb[node]);
return ;
}
int middle=(left+right)/2;
if(a<=middle) Query(2*node,left,middle,a,b);
if(middle+1<=b) Query(2*node+1,middle+1,right,a,b);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>x;
Update(1,1,n,i,x);
}
while(m--){
cin>>op>>x>>y;
if(op==0){
maxim=0;
Query(1,1,n,x,y);
cout<<maxim<<'\n';
}
else
Update(1,1,n,x,y);
}
}