#include<iostream>
#include<cstdio>
using namespace std;
int maxi=-1, maxim[400000], n, m;
void Inserare(int nod, int left, int right, int val, int pos)
{
if(left==right)
maxim[nod]=val;
else
{
int mij=(left+right)/2;
if(pos<=mij)
Inserare(2*nod, left, mij, val, pos);
else
Inserare(2*nod+1, mij+1, right, val, pos);
maxim[nod]=max(maxim[2*nod], maxim[2*nod+1]);
}
}
void Interogare(int nod, int left, int right, int si, int sf)
{
if(si<=left && right<=sf)
{if(maxim[nod]>maxi)
{maxi=maxim[nod];}}
else
{
int mij=(left+right)/2;
if(si<=mij)
Interogare(2*nod, left, mij, si, sf);
if(mij+1<=sf)
Interogare(2*nod+1, mij+1, right, si, sf);
}
}
int main()
{
FILE *fin, *fout;
fin=fopen("arbint.in","r");
fout=fopen("arbint.out","w");
int i, y, a, b, x;
fscanf(fin, "%d %d", &n, &m);
for(i=1; i<=n; i++)
{
fscanf(fin, "%d", &x);
Inserare(1,1,n,x,i);
}
for(i=0; i<m; i++)
{
fscanf(fin, "%d %d %d", &y, &a, &b);
if(y==0)
{
maxi=-2;
Interogare(1,1,n, a, b);
fprintf(fout, "%d\n",maxi);
}
if(y==1)
{
Inserare(1,1,n, b, a);
}
}
}