#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int a[250001],x,b,t,y,MAX,n,m,i,val,poz;
void Build(int nod,int st,int dr)
{
int m;
if (st==dr) a[nod]=val;
else
{
m=(st+dr)/2;
if (poz<=m) Build(2*nod,st,m);
else Build(2*nod+1,m+1,dr);
a[nod]=max(a[2*nod],a[2*nod+1]);
}
}
void Query(int nod,int st,int dr)
{
int m;
if (x<=st && dr<=y)
MAX=max(MAX,a[nod]);
else
{
m=(st+dr)/2;
if (x<=m) Query(2*nod,st,m);
if (y>m) Query(2*nod+1,m+1,dr);
}
}
int main()
{
f>>n>>m;
for (i=1;i<=n;i++)
f>>b,val=b,poz=i,Build(1,1,n);
for (i=1;i<=m;i++)
{
MAX=-100001;
f>>t>>x>>y;
if (t==0)
Query(1,1,n),g<<MAX<<'\n';
else
val=y,poz=x,Build(1,1,n);
}
return 0;
}