#include<fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,k,ok,a[300005],b[100001];
void build(int nod,int x,int y){
int mij=(x+y)/2;
if(x==y) a[nod]=b[x];
else{
build(nod*2,x,mij);
build(nod*2+1,mij+1,y);
a[nod]=max(a[nod*2],a[nod*2+1]);
}
}
int ask(int nod,int x,int y,int xi,int yi){
if(xi<=x&&yi>=y) return a[nod];
int mij=(x+y)/2,max1=-9999999999;
if(xi<=mij) max1=max(max1,ask(nod*2,x,mij,xi,yi));
if(yi>mij) max1=max(max1,ask(nod*2+1,mij+1,y,xi,yi));
return max1;
}
void change(int nod,int x,int y,int poz,int val){
if(x==y) a[nod]=val;
else{
int mij=(x+y)/2;
if(poz<=mij) change(nod*2,x,mij,poz,val);
else change(nod*2+1,mij+1,y,poz,val);
a[nod]=max(a[nod*2],a[nod*2+1]);
}
}
int main(){
int x,y;
f>>n>>k;
for(int i=1;i<=n;i++) f>>b[i];
build(1,1,n);
for(int i=1;i<=k;i++){
f>>ok>>x>>y;
if(ok==0) g<<ask(1,1,n,x,y)<<"\n";
else change(1,1,n,x,y);
}
return 0;
}