#include <fstream>
#include <cmath>
using namespace std;
int aint[400001];
void update(int ind,int poz,int val,int st,int dr)
{
if(st==dr)
aint[ind]=val;
else
{
if(poz<=(st+dr)/2)
update(2*ind,poz,val,st,(st+dr)/2);
else
update(2*ind+1,poz,val,(st+dr)/2+1,dr);
aint[ind]=max(aint[2*ind],aint[2*ind+1]);
}
}
int query(int ind,int csta,int cdra,int cstq,int cdrq)
{
if(csta>=cstq && cdra<=cdrq)
return aint[ind];
else
{
int aux=-10000000;
if(cstq<=(csta+cdra)/2)
aux=query(ind*2,csta,(csta+cdra)/2,cstq,cdrq);
if(cdrq>(csta+cdra)/2)
aux=max(aux,query(ind*2+1,(csta+cdra)/2+1,cdra,cstq,cdrq));
return aux;
}
}
int main()
{
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n,k,i,a,b,c,cn;
cin>>n>>k;
cn=n;
for(i=1;i<=4*n;i++)
aint[i]=0;
n=(1<<int(ceil(double(log2(n)))));
for(i=1; i<=cn; i++)
{
cin>>a;
update(1,i,a,1,n);
}
for(i=1; i<=k; i++)
{
cin>>c>>a>>b;
if(c==1)
update(1,a,b,1,n);
else
cout<<query(1,1,n,a,b)<<'\n';
}
return 0;
}