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