#include <fstream>
#include <algorithm>
using namespace std;
const int NMAX = 100000;
ifstream in( "arbint.in" );
ofstream out( "arbint.out" );
int N, M, x, y, k, ans, upoz;
int A[4*NMAX+1];
void update( int st, int dr, int poz, int x )
{
int mid;
if ( st==dr )
{
A[ poz ] = x;
return ;
}
mid = ( st + dr ) / 2;
if ( mid < upoz )
{
update( mid + 1, dr, 2 * poz + 1, x );
}
else
{
update( st, mid, 2 * poz, x );
}
A[ poz ] = max( A[ 2 * poz ], A[ 2 * poz + 1 ] );
}
void query( int stp, int drp, int st, int dr, int poz )
{
if ( stp <= st && dr <= drp )
{
ans = max( ans, A[ poz ] );
return ;
}
int mid= ( st+dr ) / 2;
if ( mid >= stp )
{
query( stp, drp, st, mid, 2 * poz );
}
if ( mid+1<= drp )
{
query( stp, drp, mid + 1, dr, 2 * poz + 1 );
}
}
int main( )
{
in >> N >> M;
for( int i=1; i<=N; ++i )
{
in >> x;
upoz = i;
update( 1, N, 1, x );
}
for( int i = 0; i < M; ++i )
{
in >> k >> x >> y;
if ( k==1 )
{
upoz=x;
update( 1, N, 1, y );
}
else
{
ans= -1 << 30;
query( x, y, 1, N, 1 );
out << ans << '\n';
}
}
return 0;
}