#include <fstream>
#define DIM 100011
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,r;
int v[4*DIM];
void update(int nod,int p,int u,int poz,int x){
if(p==u){
v[nod]=x;
return;
}
int mid=p+(u-p)/2;
if(poz<=mid)
update(2*nod,p,mid,poz,x);
if(poz>mid)
update(2*nod+1,mid+1,u,poz,x);
v[nod]=max(v[2*nod],v[2*nod+1]);
}
void query(int nod,int p,int u,int a,int b){
if(a<=p && u<=b){
r=max(r,v[nod]);
return;
}
int mid=p+(u-p)/2;
if(a<=mid)
query(2*nod,p,mid,a,b);
if(b>mid)
query(2*nod+1,mid+1,u,a,b);
}
int main(void){
register int i,j,x,t,a,b;
f>>n>>m;
for(i=1;i<=n;i++)
f>>x,update(1,1,n,i,x);
for(i=1;i<=m;i++){
f>>t>>a>>b;
if(t==0){
r=0;
query(1,1,n,a,b);
g<<r<<"\n";
}
else
update(1,1,n,a,b);
}
f.close();
g.close();
return 0;
}