#include <iostream>
#include <cstdio>
using namespace std;
int n,m,val[100005],c,x,y;
int a[300005];
void update(int st, int dr, int pos, int nod){
if(st==dr){
a[nod]=val[st];
return;
}
int mij=(st+dr)/2;
if(pos<=mij)
update(st,mij,pos,2*nod);
else
update(mij+1,dr,pos,2*nod+1);
a[nod] = max(a[2*nod],a[2*nod+1]);
}
int caut(int st, int dr, int nod){
if(x<=st && dr<=y)
return a[nod];
int mij = (st+dr)/2, r1=-1, r2=-1;
if(x<=mij)
r1=caut(st,mij,2*nod);
if(mij+1<=y)
r2=caut(mij+1,dr,2*nod+1);
return max(r1,r2);
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=n;++i){
cin>>val[i];
update(1,n,i,1);
}
for(int i=0;i<m;++i){
cin>>c>>x>>y;
if(c==0){
cout<<caut(1,n,1)<<"\n";
}
else{
val[x]=y;
update(1,n,x,1);
}
}
return 0;
}