#include <fstream>
using namespace std;
int n,m,adi[280005],x,tip,y;
void init (int st,int dr,int i,int v,int nod)
{
if (st==dr)
{
adi[nod]=v;
}else
{
int m=(st+dr)/2;
if (i<=m) init(st,m,i,v,nod*2);else init(m+1,dr,i,v,nod*2+1);
adi[nod]=adi[nod*2]; if (adi[nod*2+1]>adi[nod]) adi[nod]=adi[nod*2+1];
}
}
int scoate(int st,int dr,int i,int j,int nod)
{
if (st==i && dr==j)
{
return adi[nod];
}else
{
int m=(st+dr)/2;
if (j<=m)
{
return scoate(st,m,i,j,nod*2);
}else
if (i>m)
{
return scoate(m+1,dr,i,j,nod*2+1);
}else
{
int v1=scoate(st,m,i,m,nod*2),v2=scoate(m+1,dr,m+1,j,nod*2+1);
if (v1>v2) return v1;else return v2;
}
}
}
int main()
{
ifstream in ("arbint.in");
ofstream out ("arbint.out");
in>>n>>m;
for (int i=1;i<=n;++i)
{
in>>x;
init(1,n,i,x,1);
}
for (int i=1;i<=m;++i)
{
in>>tip>>x>>y;
if (tip==0)
{
out<<scoate(1,n,x,y,1)<<"\n";
}else
{
init(1,n,x,y,1);
}
}
in.close();
out.close();
return 0;
}