//ARBINT - > ARBORI DE INTERVALE
#include <stdio.h>
#include <fstream>
using namespace std;
#define dim 100001
int n,m,i,j,x,x0,tip,maxim;
int arb[4*dim+70];
void update(int nod, int poz, int st, int dr)
{
if(st==dr)
{
arb[nod]=x;
return ;
}
else
{
int mij=(st+dr)/2;
if(poz<=mij)
update(nod*2,poz,st,mij);
else
update(nod*2+1,poz,mij+1,dr);
}
arb[nod]=max(arb[nod*2],arb[nod*2+1]);
}
void interogare(int nod, int st, int dr, int start, int fin)
{
if(start<=st && dr<=fin)
{
if(arb[nod]>maxim)
maxim=arb[nod];
return;
}
else
{
int mij=(st+dr)/2;
if(start<=mij)
interogare(nod*2,st,mij,start,fin);
if(mij<fin)
interogare(nod*2+1,mij+1,dr,start,fin);
}
}
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);
update(1,i,1,n);
}
for(i=1; i<=m; i++)
{
scanf("%d%d%d",&tip,&x0,&x);
if(tip==1)
update(1,x0,1,n);
else
{
maxim=-1;
interogare(1,1,n,x0,x);
printf("%d\n",maxim);
}
}
}