#include <cstdio>
#define max(a,b) (a>b?a:b)
int arb[280000],init[280000];
int n,m,x,y,tip,i;
void cstr(int st,int dr,int poz)
{
if(st==dr)
{
init[st]=poz;
return;
}
int mij=( st + dr ) / 2;
cstr(st,mij,2*poz);
cstr(mij+1,dr,2*poz+1);
}
void update(int pozitie,int val)
{
int k=init[pozitie];
arb[k]=val;
for(k /= 2; k > 0 ; k /= 2)
arb[k]=max(arb[2*k],arb[2*k+1]);
}
int caut(int st, int dr , int poz )
{
if(x<=st && dr<=y)
return arb[poz];
if( st > y || dr < x )
int mij = ( st + dr ) / 2;
return max(caut(st,x,2*poz),caut(x+1,y,2*poz+1));
}
int main()
{
freopen( "arbore.in" , "r" , stdin );
freopen( "arbore.out" , "w" , stdout );
scanf( "%d" , &n );
scanf( "%d" , &m );
cstr( 1 , n , 1 );
for(i = 1 ; i <= n ; i ++ )
{
scanf("%d",&x);
update(i,x);
}
for( i = 1; i <= m ; i++ )
{
scanf(" %d %d %d " , &tip , &x , &y );
if(tip == 1)
update( x , y );
else printf("%d\n", caut ( 1 , n , 1 ) );
}
return 0;
}