#include <cstdio>
using namespace std;
int arb[400001],maxim=0,nod_p;
void sus(int nod)
{
if (arb[nod*2] > arb[nod*2+1])
arb[nod]=arb[nod*2];
else arb[nod]=arb[nod*2+1];
if (nod!=1)
sus(nod/2);
}
void insereaza(int nod,int nr,int poz,int a,int b)
{
arb[nod]=-1;
if (a==b)
{
arb[nod]=nr;
nod_p=nod;
}
else
{
int mij=(a+b)/2;
if (poz <= mij)
insereaza(nod*2,nr,poz,a,mij);
else
insereaza(nod*2+1,nr,poz,mij+1,b);
}
}
void interogheaza(int nod,int a,int b,int st,int dr)
{
if (a<=st && dr<=b)
{
if (arb[nod] > maxim)
maxim=arb[nod];
}
else
{
int mij=(st+dr)/2;
if (a <= mij)
interogheaza(nod*2,a,b,st,mij);
if (b > mij)
interogheaza(nod*2+1,a,b,mij+1,dr);
}
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int n,m;
scanf("%d %d\n",&n,&m);
for (int i=1;i<=200000;i++)
arb[i]=-1;
for (int i=1;i<=n;i++)
{
int a;
scanf("%d ",&a);
insereaza(1,a,i,1,n);
sus(nod_p/2);
}
for (int i=1;i<=m;i++)
{
int a,x,y;
scanf("%d %d %d\n",&a,&x,&y);
if (a==1)
insereaza(1,y,x,1,n), sus(nod_p/2);
if (a==0)
{
maxim=0;
interogheaza(1,x,y,1,n);
printf("%d\n",maxim);
}
}
}