#include<stdio.h>
#define mij(a,b) (a+b)/2
#define max(a,b) (a>b?a:b)
#define N 100001
#define NN 280001
#define INF 1000000000
int n,m,poz[N],arb[NN],y,z;
void ini(int st,int dr,int i)
{
int h=mij(st,dr);
if(st==dr)
{
poz[st]=i;
arb[i]=-INF;
return;
}
ini(st,h,i*2);
ini(h+1,dr,i*2+1);
}
void up( int i )
{
for( i/=2 ; i ; i/=2 )
arb[i]=max(arb[i*2],arb[i*2+1]);
}
int querry(int a,int b,int i)
{
if(a>=y&&b<=z)
return arb[i];
int h=mij(a,b),st=-INF,dr=-INF;
if( y<=h )
st=querry(a,h,2*i);
if( z>h )
dr=querry(h+1,b,2*i+1);
return max(st,dr);
}
void baz()
{
for(int i=1 ; i<=n ; ++i)
printf("%3d",poz[i]);
}
void read()
{
int x;
scanf("%d%d",&n,&m);
ini(1,n,1);
//baz();
for( int i=1 ; i<=n ; ++i )
{
scanf("%d",&x);
arb[ poz[i] ]=x;
up(poz[i]);
}
}
void solve()
{
int x;
while(m--)
{
scanf("%d%d%d",&x,&y,&z);
if(x==1)
{
arb[poz[y]]=z;
up(poz[y]);
}
else
printf("%d\n",querry(1,n,1));
}
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
read();
solve();
return 0;
}