#include<stdio.h>
#define nmax 100000
#define max(a,b) ((a)>(b)?(a):(b))
int Arb[nmax*4],a[nmax];
int val,pos,sol;
int aux1,aux2,aux3;
//misto algoritm :D
//I really feel like I learned something today :)
void maxim(int nod,int left,int right)
{
if( aux2 <= left && aux3 >= right)
sol=max(sol,Arb[nod]);
else
{
int mij=(left+right)/2;
if( aux2<=mij ) maxim(2*nod,left,mij);
if( mij < aux3) maxim(2*nod+1,mij+1,right);
}
}
void update(int nod ,int left, int right)
{
if( left == right )
Arb[nod]=val;
else
{
int mij=(left+right)/2;
if( pos <= mij ) update( 2*nod ,left,mij);
else update( 2*nod+1,mij+1,right);
Arb[nod] = max( Arb[2*nod], Arb[2*nod+1] );
}
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int n,m,i;
scanf("%d%d",&n,&m);
for(i=1; i<=n; ++i){
scanf("%d",&a[i]);
pos=i; val=a[i];
update(1,1,n);
}
/*
for(int i=1; i<=n; ++i)
printf("%d ",Arb[i]);*/
for(i=1; i<=m; ++i){
scanf("%d%d%d",&aux1,&aux2,&aux3);
if( !aux1 )
{
sol=-1;
maxim(1,1,n);
printf("%d\n",sol);
}
else
{
pos=aux2; val=aux3;
update(1,1,n);
}
}
return 0;
}