#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int a[500000],n,m,i,Max,x,y;
bool p;
void modificare(int nod,int poz,int v,int p,int u)
{
if(p<u)
{
int mij=(p+u)/2;
if(poz<=mij)
modificare(2*nod,poz,v,p,mij);
else
modificare(2*nod+1,poz,v,mij+1,u);
a[nod]=max(a[2*nod],a[2*nod+1]);
}
else
a[nod]=v;
}
void interogare(int nod,int st,int dr,int p,int u)
{
if(st<=p&&dr>=u)
Max=max(Max,a[nod]);
else
{
int mij=(p+u)/2;
if(st<=mij)
interogare(2*nod,st,dr,p,mij);
if(dr>mij)
interogare(2*nod+1,st,dr,mij+1,u);
}
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>x;
modificare(1,i,x,1,n);
}
for(i=1;i<=m;i++)
{
fin>>p>>x>>y;
if(p==0)
{
Max=0;
interogare(1,x,y,1,n);
fout<<Max<<"\n";
}
else
modificare(1,x,y,1,n);
}
return 0;
}