# include <iostream>
# include <fstream>
# include <algorithm>
using namespace std;
# define MAX_N 100000
int aint[4 * MAX_N];
int val, pos;
void update( int b, int e, int t ) {
if ( b == e )
aint[t] = val;
else {
int m = ( b + e ) / 2;
if ( pos <= m )
update( b, m, t * 2 + 1 );
else
update( m + 1, e, t * 2 + 2 );
aint[t] = max( aint[t * 2 + 1], aint[t * 2 + 2] );
}
}
int query( int l, int r, int b, int e, int t ) {
if ( b == l && e == r )
return aint[t];
else {
int m = ( b + e ) / 2;
if ( r <= m )
return query( l, r, b, m, t * 2 + 1 );
else if ( l > m )
return query( l, r, m + 1, e, t * 2 + 2 );
else
return max( query( l, m, b, m, t * 2 + 1 ),
query( m + 1, r, m + 1, e, t * 2 + 2 ) );
}
}
int main() {
ifstream fin( "arbint.in" );
ofstream fout( "arbint.out" );
int n, m, i, a, b, c;
fin >> n >> m;
for ( i = 1; i <= n; i ++ ) {
fin >> a;
pos = i;
val = a;
update( 1, n, 0 );
}
for ( i = 0; i < m; i ++ ) {
fin >> c >> a >> b;
if ( c == 0 )
fout << query( a, b, 1, n, 0 ) << '\n';
else {
pos = a;
val = b;
update( 1, n, 0 );
}
}
fin.close();
fout.close();
return 0;
}