#include<cstdio>
#include<algorithm>
using namespace std;
FILE*in=fopen("arbint.in","r");
FILE*out=fopen("arbint.out","w");
const int NMAX=100007;
int n,m,i,v[4*NMAX],po=1,c,a,b,x;
void update(int poz,int val,int nod,int nodst,int noddr)
{
if(nodst==noddr)
{
v[nod]=val;
return;
}
int mij=(nodst+noddr)/2;
if(poz<=mij)
{
update(poz,val,2*nod,nodst,mij);
}
else
{
update(poz,val,2*nod+1,mij+1,noddr);
}
v[nod]=max(v[2*nod],v[2*nod+1]);
}
int qer(int st,int dr,int nod,int nodst,int noddr)
{
if(st==nodst&&dr==noddr)
{
return v[nod];
}
int mij=(nodst+noddr)/2;
if(mij>=dr)
{
return qer(st,dr,2*nod,nodst,mij);
}
else if(st>=mij+1)
{
return qer(st,dr,2*nod+1,mij+1,noddr);
}
else
{
return max(qer(st,mij,2*nod,nodst,mij),qer(mij+1,dr,2*nod+1,mij+1,noddr));
}
}
int main()
{
fscanf(in,"%d%d",&n,&m);
while(po<n)
{
po*=2;
}
for(i=1;i<=n;i++)
{
fscanf(in,"%d",&x);
update(i,x,1,1,po);
}
for(i=1;i<=m;i++)
{
fscanf(in,"%d%d%d",&c,&a,&b);
if(c==1)
{
update(a,b,1,1,po);
}
else
{
fprintf(out,"%d\n",qer(a,b,1,1,po));
}
}
}