#include <fstream>
#include <iostream>
#define nmax 100001
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int arb[5*nmax],n,rez;
int maxim(int a,int b)
{
if(a>b) return a;
else return b;
}
void change(int p, int v, int s, int d, int c)
{
if(s==d) { arb[c]=v; return; }
if(p<s || d<p) return;
int m=(s+d)/2;
if(p<=m) change(p,v,s,m,2*c);
else change(p,v,m+1,d,2*c+1);
arb[c]=maxim(arb[2*c],arb[2*c+1]);
}
void query(int a,int b, int s, int d, int c)
{
if( a<=s && d<=b )
{
if(arb[c]>rez) rez=arb[c];
return;
}
int m=(s+d)/2;
if(a<=m) query(a,b,s,m,2*c);
if(b>m) query(a,b,m+1,d,2*c+1);
}
int main()
{
int m,i,x,a,b;
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>x;
change(i,x,1,n,1);
}
for(i=1;i<=m;i++)
{
fin>>x; fin>>a>>b;
if(!x)
{
rez=-1;
query(a,b,1,n,1);
fout<<rez;
}
else change(a,b,1,n,1);
}
}