#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("arblong int.in");
ofstream g("arblong int.out");
long int n,m,A[300005],mx=0;
void Update(long long int nod,long long int st,long long int dr,long long int poz,long long int x)
{ long long int mid;
if (st==dr) A[nod]=x;
else
{ mid=(st+dr)/2;
if (poz<=mid) Update(2*nod,st,mid,poz,x);
else Update(2*nod+1,mid+1,dr,poz,x);
A[nod]=max(A[2*nod], A[2*nod+1]);
}
}
void Query(long int nod,long int st,long int dr,long int x,long int y)
{ long int mid;
if (x<=st && dr<=y)
mx=max(mx,A[nod]);
else
{ mid=(st+dr)/2;
if (x<=mid) Query(2*nod,st,mid,x,y);
if (y>mid) Query(2*nod+1,mid+1,dr,x,y);
}
}
int main()
{ long int i,el,t,p,v,s,d;
f>>n>>m;
for(i=1;i<=n;i++)
{ f>>el;
Update(1,1,n,i,el);
}
// cout<<el<<" "<<m;
for(i=1;i<=m;i++)
{ f>>t;
if (t==1) { f>>p>>v; Update(1,1,n,p,v) ;}
if (t==0) {mx=0; f>>s>>d; Query(1,1,n,s,d); g<<mx<<"\n";}
}
return 0;
}