#include<stdio.h>
#define nmax 100000
int n,m,arb[5*nmax],i,x,pos, maximum,a;
int maxim(int a, int b)
{
if(a>b)
return a;
else return b;
}
void update(int nod, int left, int right)
{
int div=(left+right)/2;
if(left==right)
arb[nod]=x;
else {
if(pos<=div)
update(2*nod, left, div);
else update(2*nod+1, div+1, right);
arb[nod]=maxim(arb[2*nod], arb[2*nod+1]);
}
}
void query(int nod, int left, int right)
{
if (pos<= left&&right<=x)
{
if (maximum<arb[nod]) maximum=arb[nod];
return;
}
int div = (left+right)/2;
if (pos<=div) query(2*nod,left,div);
if (div<x) query(2*nod+1,div+1,right);
}
int main()
{
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
scanf("%d %d", &n, &m);
for(i=1;i<=n;i++)
{
scanf("%d", &x);
pos=i;
update(1,1,n);
}
for(i=1;i<=m;i++)
{
scanf("%d %d %d", &a,&pos,&x);
if(a==1)
update(1,1,n);
else
{
maximum=-1;
query(1,1,n);
printf("%d\n", maximum);
}
}
return 0;
}