#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int T[1000000],n,x,y,z,m;
int M;
void ads(int a,int b,int k,int piv)
{
if(a==k&&b==k)
{
T[piv];
cout<<T[piv];
}
else
{
if(k<=(a+b)/2)
ads(a,(a+b)/2,k,2*piv);
else
ads((a+b)/2+1,b,k,2*piv+1);
}
if(T[piv]<T[2*piv]||T[piv]<T[2*piv+1])
T[piv]=max(T[2*piv],T[2*piv+1]);
}
void ad(int a,int b,int k,int piv,int x)
{
if(a==k&&b==k)
{
T[piv]=x;
}
else
{
if(k<=(a+b)/2)
ad(a,(a+b)/2,k,2*piv,x);
else
ad((a+b)/2+1,b,k,2*piv+1,x);
}
if(T[2*piv]||T[2*piv+1])
T[piv]=max(T[2*piv],T[2*piv+1]);
}
void af_max(int a,int b,int y,int z,int piv)
{
if(a>=y&&b<=z)
M=max(T[piv],M);
else
{
if((a>=y&&a<=z)||((a+b)/2>=y&&(a+b)/2<=z))
af_max(a,(a+b)/2,y,z,2*piv);
if((b>=y&&b<=z)||(((a+b)/2+1)>=y&&((a+b)/2+1)<=z))
af_max((a+b)/2+1,b,y,z,2*piv+1);
}
}
int main()
{
f>>n>>m;
if(n!=1)
{for(int i=1; i<=n; i++)
{
f>>x;
ad(1,n,i,1,x);
}
for(int i=1; i<=m; i++)
{
f>>x>>y>>z;
if(x==0)
{
M=0;
af_max(1,n,y,z,1);
g<<M<<"\n";
}
else
ad(1,n,y,1,z);
}
}
else
{
f>>T[1];
for(int i=1; i<=m; i++)
{
f>>x>>y>>z;
if(x==0)
g<<T[1];
else
T[1]=z;
}
}
return 0;
}