#include<bits/stdc++.h>
using namespace std;
int dr,st,v[400040],val,x,y,z,N,M;
void actualizare(int nod ,int st ,int dr ,int a ,int b)
{
if ( st == dr )
{
v[nod] = b;
return;
}else
{
int mijloc = (st + dr)/2;
if ( a <= mijloc )
actualizare(2 * nod , st , mijloc , a , b);
else
actualizare(2*nod + 1 , mijloc + 1 , dr , a , b );
v[nod] = max( v[ 2 * nod ] , v[ 2 * nod + 1]);
}
}
void interogare(int nod , int st , int dr ,int a , int b)
{
if ( a <= st && dr <= b )
{
val = max(val , v[nod]);
return;
}else
{
int mijloc = (st + dr)/2;
if( a <= mijloc)
interogare( 2 * nod , st , mijloc , a, b);
if( b > mijloc)
interogare( 2 * nod + 1, mijloc + 1 , dr ,a , b);
}
}
int main()
{
ifstream in("arbint.in");
ofstream out("arbint.out");
in>>N>>M;
for (int i = 1; i <= N ; i++)
{
in>>x;
actualizare( 1 , 1 , N, i , x);
}
for (int i = 1; i <= M ; i++)
{
in>>z>>x>>y;
if( z == 1)
actualizare( 1 , 1 , N , x ,y );
else
{
val = -1;
interogare(1 , 1 ,N , x ,y );
out<<val<<'\n';
}
}
return 0;
}