#include<fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int x,a,b,n,m,i,M,v[200010],OK,t,j,ind,poz;
int ma(int a,int b)
{
if(a>b)
return a;
return b;
}
void update(int st,int dr,int nr)
{
int m=(st+dr)>>1;
v[nr]=ma(v[nr],x);
if(st==dr)
return ;
if(j<=m)
update(st,m,nr<<1);
else
update(m+1,dr,(nr<<1)+1);
}
void find(int st,int dr,int nr)
{
if(st>=a&&dr<=b)
M=ma(v[nr],M);
else
{
int m=(st+dr)>>1;
if(a<=m)
find(st,m,(nr<<1));
if(b>m)
find(m+1,dr,(nr<<1)+1);
}
}
void goup(int p)
{
while(p)
{
v[p]=ma(v[2*p],v[2*p+1]);
p>>=1;
}
}
int div(int st,int dr,int nr)
{
if(st==dr)
poz=nr;
else
if(!poz)
{
int m=(st+dr)>>1;
if(a>m)
div(m+1,dr,nr*2+1);
else
div(st,m,nr*2);
}
}
int main ()
{
OK=1;
f>>n>>m;
for(j=1;j<=n;++j)
{
f>>x;
update(1,n,1);
}
OK=0;
for(i=1;i<=m;++i)
{
poz=0;
M=0;
f>>t>>a>>b;
if(!t)
find(1,n,1);
else
{
div(1,n,1);
v[poz]=b;
goup(poz>>1);
}
if(!t)
g<<M<<"\n";
}
return 0;
}