#include<fstream>
#include<algorithm>
using namespace std;
long i,j,n,m,tip,a1,a2,x;
long mij;
long a[600010];
void schimba(int nod,int st,int dr,int poz,int val)
{
if(st==dr)
a[nod]=val;
else
{
mij=(st+dr)/2;
if(poz<=mij)
schimba(nod*2,st,mij,poz,val);
if(mij<poz)
schimba(nod*2+1,mij+1,dr,poz,val);
a[nod]=max(a[nod*2],a[nod*2+1]);
}
}
void detmax(int nod,int st,int dr,int a1,int b)
{
if(a1<=st&&b>=dr)
{
if(a[nod]>x)
x=a[nod];
return ;
}
if(st<dr)
{
mij=(st+dr)/2;
if(a1<=mij)
detmax(nod*2,st,mij,a1,b);
if(mij<b)
detmax(nod*2+1,mij+1,dr,a1,b);
}
}
int main()
{
FILE *f=fopen("arbint.in","r");
FILE *g=fopen("arbint.out","w");
fscanf(f,"%ld%ld",&n,&m);
a[0]=0;
for(i=1;i<=n;++i)
{
fscanf(f,"%ld",&x);
schimba(1,1,n,i,x);
}
for(i=1;i<=m;++i)
{
fscanf(f,"%ld%ld%ld",&tip,&a1,&a2);
if(tip==1)
schimba(1,1,n,a1,a2);
else
{
x=0;
detmax(1,1,n,a1,a2);
fprintf(g,"%ld\n",x);
}
}
return 0;
}