#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int arb[400005];
void actualizare (int a,int b,int nod,int poz,int val)
{
int mij;
if (a==b)
{
arb[nod]=val;
}
else
{
mij=(a+b)/2;
if (poz<=mij)
{
actualizare(a,mij,nod*2,poz,val);
}
else
{
actualizare(mij+1,b,nod*2+1,poz,val);
}
arb[nod]=max(arb[nod*2],arb[nod*2+1]);
}
}
int intrebare(int a,int b,int nod,int qa,int qb)
{
int mij,r1=0,r2=0;
if (qa<=a&&b<=qb)
{
return arb[nod];
}
mij=(a+b)/2;
if (qa<=mij)
{
r1=intrebare(a,mij,2*nod,qa,qb);
}
if (qb>mij)
{
r2=intrebare(mij+1,b,2*nod+1,qa,qb);
}
return max(r1,r2);
}
int x,y,z,i;
int main()
{
int n,m;
f>>n>>m;
for (i=1;i<=n;i++)
{
f>>x;
actualizare(1,n,1,i,x);
}
for (i=1;i<=m;i++)
{
f>>x>>y>>z;
if (x==1)
{
actualizare(1,n,1,y,z);
}
else
{
g<<intrebare(1,n,1,y,z)<<'\n';
}
}
return 0;
}