#include<stdio.h>
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int ST,DR,x[400067],v,p,n,m,i,q,f,a,b,m1;
int Max(int a, int b)
{
if(a>b)
return a;
else
return b;
}
void search(int nod, int st, int dr)
{
int mij;
if(ST <= st && dr <= DR)
{
if(m<x[nod])
m=x[nod];
return;
}
mij=(st+dr)/2;
if(ST <= mij)
search(2 * nod, st, mij);
if(mij < DR)
search(2 * nod + 1, mij + 1, dr);
}
void insert(int nod, int st, int dr)
{
int mij;
if(st==dr)
{
x[nod]=v;
return;
}
mij=(st+dr)/2;
if(p<=mij)
insert(2 * nod, st, mij);
else
insert(2 * nod + 1, mij + 1, dr);
x[nod]= Max(x[2 * nod], x[2 * nod + 1]);
}
int main()
{
in>>m1>>n;
for(i=1;i<=m1;++i)
{
in>>q;
p=i;
v=q;
insert(1, 1, m1);
}
for(i=1;i<=n;++i)
{
in>>f>>a>>b;
if(f==0)
{
m=-1;
ST=a;
DR=b;
search(1, 1, m1);
out<<m<<'\n';
}
else{
p=a;
v=b;
insert(1, 1, m1);
}
}
return 0;
}