#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
#define mult 100002
#define maxim(a,b) (a>b?a:b)
int n, m, val, i, arb[3*mult], x, y, z, maxi;
void up( int poz, int stanga, int dreapta )
{
if( stanga == dreapta )
{
arb[poz] = val;
}
else
{
int mij = ( stanga + dreapta )/2;
if( i > mij )
{
up( 2*poz + 1, mij + 1, dreapta );
}
else
{
up( 2*poz, stanga, mij );
}
arb[poz] = maxim( arb[2*poz], arb[2*poz + 1]);
}
}
void inter( int poz, int stanga, int dreapta )
{
if( y <= stanga && dreapta <= z )
{
if( arb[poz] > maxi )
maxi = arb[poz];
}
else
{
int mij = ( stanga + dreapta )/2;
if ( y <= mij )
inter( poz*2, stanga, mij );
if( z > mij )
inter( poz*2 +1, mij + 1, dreapta );
}
}
int main()
{
f >> n >> m;
for( i = 1; i <= n; i ++ )
{
f >> val;
up(1, 1, n);
}
for( int j = 1; j <= m; j ++ )
{
f >> x >> y >> z;
if( x == 0 )
{
maxi = -1;
inter( 1, 1, n );
g << maxi << '\n';
}
else
{
val = z;
i = y;
up( 1, 1, n );
}
}
return 0;
}