#include<stdio.h>
#define Nmax 100001
int arb[2*Nmax],n,m,op,a,b,max;
void update(int nod,int s,int d,int inf,int poz)
{
if(s==d)
{
arb[nod]=inf;
return;
}
int mij=(s+d)/2;
if(poz<=mij)
update(2*nod,s,mij,inf,poz);
else
update(2*nod+1,mij+1,d,inf,poz);
if(arb[2*nod]>=arb[2*nod+1])
arb[nod]=arb[2*nod];
else
arb[nod]=arb[2*nod+1];
}
void query(int nod,int s,int d, int a, int b)
{
if(a<=s && d<=b)
{
if(max<arb[nod])max=arb[nod];
return ;
}
int mij=(s+d)/2;
if(a<=mij)query(2*nod,s,mij,a,b);
if(mij<b)query(2*nod+1,mij+1,d,a,b);
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
int i,x;
for(i=1;i<=n;i++)
{
scanf("%d",&x);
update(1,1,n,x,i);
}
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&op,&a,&b);
if(op)
update(1,1,n,b,a);
else
{
max=-1;
query(1,1,n,a,b);
printf("%d\n",max);
}
}
return 0;
}