#include <iostream>
#include<stdio.h>
#define NMAX 100010
using namespace std;
int arb[5*NMAX],n,m,
li,ls,val,poz,cat;
void update( int nod, int st, int dr )
{
if( st==dr )
{
arb[nod] = val;
return ;
}
int mid = (dr+st)/2;
if(poz<=mid) update( 2*nod,st,mid);
else update( 2*nod+1,mid+1,dr );
arb[nod] = (arb[2*nod]>arb[2*nod+1]) ? arb[2*nod] : arb[2*nod+1];
}
void quest( int nod, int st, int dr )
{
if( li<=st && ls>=dr )
{
cat = ( cat<arb[nod] ) ? arb[nod] : cat;
return ;
}
int mid = (dr+st)/2;
if(li<=mid) quest( 2*nod,st,mid);
if(ls>mid) quest(2*nod+1,mid+1,dr);
}
void read()
{
int i,x;
scanf("%d%d",&n,&m);
for( i=1; i<=n; i++ )
{
scanf("%d",&x);
poz=i;val=x;
update(1,1,n);
}
}
void solve()
{
int i,op,a,b;
for( i=1; i<=m; i++ )
{
scanf("%d%d%d",&op,&a,&b);
if(op)
{
poz = a; val = b;
update(1,1,n);
}
if(op==0)
{
cat = -1;
li = a; ls = b;
if(a>b) li=b,ls=a;
quest(1,1,n);
printf("%d\n",cat);
}
}
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
read();
solve();
return 0;
}