#include<iostream>
#include<cstdio>
using namespace std;
#define Nmax 100005
int a[4*Nmax],n,m,kmax,x,maxim,op,y;
void update(int k,int poz, int x,int p,int u){
kmax=max(k,kmax);
if(p==u)
a[k] = x;
else{
int mij;
mij=(p+u)/2;
if(poz<=mij)
update(2*k,poz,x,p,mij);
if(poz>mij)
update(2*k+1,poz,x,mij+1,u);
a[k]=max(a[2*k],a[2*k+1]);
}
}
void query(int k, int st, int dr, int p,int u)
{
if(st<=p && dr>=u) maxim=max(maxim,a[k]);
else
{
int mij;
mij=(p+u)/2;
if(st<=mij)
query(2*k,st,dr,p,mij);
if(dr>mij)
query(2*k+1,st,dr,mij+1,u);
}
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int i;
cin>>n>>m;
for(i=1;i<=n;i++){
cin>>x;
update(1,i,x, 1,n);
}
for(i=1;i<=m;i++){
cin>>op>>x>>y;
if(op==0)
{ maxim=0;
query(1,x,y,1,n);
cout<<maxim<<"\n";
}
else
update(1,x,y,1,n);
}
return 0;
}