#include<fstream>
#include<cstdio>
using namespace std;
FILE *f;
ofstream g("arbint.out");
int m,n,p,i,x,y,arb[400000];
int maxim(int a,int b)
{
if(a>b)
return a;
return b;
}
void insereaza(int nod,int li,int ls,int poz,int val)
{
if(li==ls)
{
arb[nod]=val;
return;
}
int mij=(li+ls)>>1;
if(poz<=mij)
insereaza(nod<<1,li,mij,poz,val);
else
insereaza((nod<<1)+1,mij+1,ls,poz,val);
arb[nod]=maxim(arb[nod<<1],arb[(nod<<1)+1]);
}
int query(int nod,int li,int ls,int st,int dr)
{
if(st<=li&&ls<=dr)
return arb[nod];
int mij=(li+ls)/2,x=0;
if(st<=mij)
x=query(nod<<1,li,mij,st,dr);
if(mij<dr)
x=maxim(x,query((nod<<1)+1,mij+1,ls,st,dr));
return x;
}
int main()
{
f=fopen("arbint.in","r");
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;++i)
{
fscanf(f,"%d",&x);
insereaza(1,1,n,i,x);
}
for(i=1;i<=m;++i)
{
fscanf(f,"%d%d%d",&p,&x,&y);
if(p==1)
insereaza(1,1,n,x,y);
else
g<<query(1,1,n,x,y)<<'\n';
}
return 0;
}