#include <fstream>
#define MAXN 100000
using namespace std;
ifstream fin( "arbint.in" );
ofstream fout( "arbint.out" );
int aint[4*MAXN+5];
inline int maxim( int x, int y )
{
if( x>y )
return x;
else
return y;
}
void update( int p, int val, int poz, int st, int dr )
{
if( st==dr )
aint[poz]=val;
else
{
int mid=(st+dr)/2;
if( p<=mid )
update(p,val,2*poz,st,mid);
else
update(p,val,2*poz+1,mid+1,dr);
aint[poz]=maxim(aint[2*poz],aint[2*poz+1]);
}
}
int query( int a, int b, int poz, int st, int dr )
{
if( a<=st && dr<=b )
return aint[poz];
else
{
int mid=(st+dr)/2, ans=0;
if( a<=mid )
ans=maxim(ans,query(a,b,2*poz,st,mid));
if( mid+1<=b )
ans=maxim(ans,query(a,b,2*poz+1,mid+1,dr));
return ans;
}
}
int main()
{
int n, m;
fin>>n>>m;
for( int i=1;i<=n;i++ )
{
int k;
fin>>k;
update(i,k,1,1,n);
}
for( int i=1;i<=m;i++ )
{
int op, a, b;
fin>>op>>a>>b;
if( op )
update(a,b,1,1,n);
else
fout<<query(a,b,1,1,n)<<'\n';
}
return 0;
}