#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&&maximum<arb[nod])
maximum=arb[nod];
int div=(left+right)/2;
if(pos<=div&&left!=right)
query(2*nod, left, div);
if(div<x&&left!=right)
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;
}