#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int arb[ 4 * 100010 ],i,j,n,m,a,b,st,fn,x;
void UpDat3(int nod, int left, int right, int poz, int val)
{
int middle = ( left + right ) / 2;
if( left == right )
{
arb[ nod ] = val;
return;
}
if( poz <= middle )
UpDat3( 2 * nod , left , middle , poz , val );
else
UpDat3( 2 * nod + 1 , middle + 1 , right , poz , val );
arb[ nod ] = max( arb[ 2 * nod ] , arb[ 2 * nod + 1 ] );
}
int Qu3ry(int nod, int left, int right, int st, int fn)
{
if( left > fn || right < st )
return -1;
else if( left >= st && right <= fn )
return arb[ nod ];
int middle = ( left + right ) / 2;
return max( Qu3ry( 2 * nod , left , middle , st , fn ) , Qu3ry( 2 * nod + 1 , middle + 1 , right , st , fn ) );
}
int main()
{
fin>>n>>m;
for( i = 1 ; i <= n ; i++ )
{
fin>>x;
UpDat3( 1 , 1 , n , i , x );
}
for( i = 1 ; i <= m ; i++ )
{
fin>>x;
if( x == 1 )
{
fin>>a>>b;
UpDat3( 1 , 1 , n , a , b );
}
else
{
fin>>a>>b;
fout<<Qu3ry(1 , 1 , n , a , b)<<'\n';
}
}
return 0;
}