#include <iostream>
#include <fstream>
#define max(a,b) a>b?a:b
//FILE *f=fopen("liceu.in","r");
//FILE *g=fopen("liceu.out","w");
std::ifstream f("arbint.in");
std::ofstream g("arbint.out");
int a[300000];
void upd(int nod,int li,int lf,int &ind,int &val){
if(li==lf)
a[nod]=val;
else{
int mij=(li+lf)/2;
if(ind<=mij)upd(2*nod,li,mij,ind,val);
else upd(2*nod+1,mij+1,lf,ind,val);
a[nod]=max(a[2*nod],a[2*nod+1]);
}
}
int vmax(int nod,int li,int lf,int &s,int &d)
{
if(s<=li&&lf<=d)return a[nod];
int m=(li+lf)/2;
int v1=0,v2=0;
if(s<=m)v1=vmax(2*nod,li,m,s,d);
if(d>m)v2=vmax(2*nod+1,m+1,lf,s,d);
return max(v1,v2);
}
int main()
{
int x,ind,val,op,n,m;
f>>n>>m;
for(int i=1;i<=n;i++){
f>>x;
upd(1,1,n,i,x);
}
for(int i=1;i<=m;i++){
f>>op>>ind>>val;
if(op==1)
upd(1,1,n,ind,val);
else g<<vmax(1,1,n,ind,val)<<"\n";
}
}