#include<iostream>
using namespace std;
#define NMAX 100001
int n,aint[4*NMAX];
void init(int nod,int st,int dr){
if(st==dr){
cin>>aint[nod];
return;
}
int mij=(st+dr)/2;
init(2*nod,st,mij);
init(2*nod+1,mij+1,dr);
aint[nod]=max(aint[2*nod],aint[2*nod+1]);
}
signed rez=0xffffffff;
void query(int nod,int st,int dr,int x,int y){
if(y<st||dr<x)return;
if(x<=st&&dr<=y){
rez=max(rez,aint[nod]);
return;
}
int mij=(st+dr)/2;
query(2*nod,st,mij,x,y);
query(2*nod+1,mij+1,dr,x,y);
}
void update(int nod,int st,int dr,int x,int y){
if(st==dr){
if(st==x)aint[nod]=y;
return;
}
int mij=(st+dr)/2;
if(x<=mij)update(2*nod,st,mij,x,y);
else update(2*nod+1,mij+1,dr,x,y);
aint[nod]=max(aint[2*nod],aint[2*nod+1]);
}
signed main(){
#ifndef LOCAL
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
#endif // LOCAL
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int q;
cin>>n>>q;
init(1,1,n);
for(;q;--q){
int op;
cin>>op;
if(op){
//update
int x,y;
cin>>x>>y;
update(1,1,n,x,y);
}else{
rez=0xffffffff;
int x,y;
cin>>x>>y;
query(1,1,n,x,y);
cout<<rez<<"\n";
}
}
return 0;
}