#include<stdio.h>
#define dim 100100
int x,val,poz,n,m,a , b ;
int el[4*dim];
int MAX;
#define INF 0x3f3f3f
int max ( int x , int y)
{
if ( x>y )
return x;
return y;
}
void update ( int nod,int st , int dr)
{
if ( st == dr )
{
el[ nod ] = val ;
return ;
}
int mij = (st+dr)>>1;
// printf("%d %d %d\n",st,mij,dr);
if ( poz <=mij )
update(2*nod , st, mij );
else
update ( 2*nod+1 , mij+1, dr );
el [nod ] = max ( el[2*nod] , el[2*nod+1] ) ;
}
void query ( int nod , int st , int dr )
{
int mij = (st+dr)/2;
if ( a<=st && dr<=b )
{
if ( el[nod] >MAX )
MAX = el[nod];
return ;
}
if ( mij >= a )
query ( nod*2 , st , mij ) ;
if ( mij < b )
query ( nod*2+1 , mij+1 , dr ) ;
}
void read()
{
scanf("%d %d\n",&n,&m);
for(int i=1 ; i<=n ; i++)
{
scanf("%d ",&val);
poz = i;
update(1,1,n );
}
int op ;
for(int i=1 ; i<=m;i++)
{
scanf("%d",&op);
if ( op == 1)
{
scanf("%d %d",&poz , &val ) ;
update ( 1,1,n ) ;
}
else
{
scanf("%d %d",&a,&b);
MAX=-INF;
query ( 1,1, n );
printf("%d\n",MAX);
}
}
}
void solve()
{
}
int main ()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
read();
solve();
}