# include <stdio.h>
int a[300005],maxf,i,n,b,l,x,y,k,poz;
void arb (int st,int dr,int i)
{
if (st==dr)
a[i]=x;
else
{
int mij=(st+dr)/2;
if (poz<=mij)
arb (st,mij,2*i);
else
arb (mij+1,dr,2*i+1);
if (a[2*i]>a[2*i+1])
a[i]=a[2*i];
else
a[i]=a[2*i+1];
}
}
void max (int st,int dr,int i)
{
if (x<=st && y>=dr)
{
if (maxf<a[i])
maxf=a[i];
}
else
{
int mij=(st+dr)/2;
if (x<=mij)
max (st,mij,2*i);
if (y>mij)
max (mij+1,dr,2*i+1);
}
}
void inter (int st,int dr,int i)
{
if (st==dr)
a[i]=y;
else
{
int mij=(st+dr)/2;
if (x<=mij)
inter (st,mij,2*i);
else
inter (mij+1,dr,2*i+1);
if (a[2*i]>a[2*i+1])
a[i]=a[2*i];
else
a[i]=a[2*i+1];
}
}
int main ()
{
freopen ("arbint.in","r",stdin);
freopen ("arbint.out","w",stdout);
scanf ("%i%i",&n,&k);
for (i=1;i<=n;i++)
{
poz=i;
scanf ("%i",&x);
arb (1,n,1);
}
for (i=1;i<=k;i++)
{
scanf ("%i%i%i",&l,&x,&y);
if (l==0)
{
maxf=-32000;
max (1,n,1);
printf ("%i\n",maxf);
}
else
inter (1,n,1);
}
return 0;
}