#include<stdio.h>
int sol,poz,a,v[400004],x,b,n,m,i;
int maxi(int aa , int bb)
{ if(aa>bb)
return aa ;
return bb;
}
void update(int st,int dr, int nod)
{
if(st==dr)
v[nod]=x;
else
{
int mij=(st+dr)/2;
if(poz<=mij)
update(st,mij,2*nod);
else
update(mij+1,dr,2*nod+1);
v[nod]=maxi(v[2*nod],v[2*nod+1]);
}
}
void querry(int st, int dr , int nod)
{
if(st>=a&&b>=dr)
{
if(v[nod]>sol)
sol=v[nod];
}
else
{
int mij=(st+dr)/2;
if(a<=mij)
querry(st,mij,2*nod);
if(mij<b)
querry(mij+1,dr,2*nod+1);
}
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&x);
poz=i;
update(1,n,1);
}
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&a,&b);
if(x==1)
{
poz=a;
x=b;
update(1,n,1);
}
else
{
sol=0;
querry(1,n,1);
printf("%d\n",sol);
}
}
return 0;
}