#include <iostream>
#include <cstdio>
using namespace std;
int m,n,vCit[100002],A[400008],raspuns;
void initialize_arb(int pai,int st,int dr)
{
if(st>=dr)
{
A[pai]=vCit[st];
return;
}
int mij=(st+dr)/2;
initialize_arb(2*pai,st,mij);
initialize_arb(2*pai+1,mij+1,dr);
A[pai]=max(A[2*pai],A[2*pai+1]);
}
void update_arb(int pai,int st,int dr,int POZ,int VAL)
{
if(st>=dr)
{
A[pai]=POZ;
return;
}
int mij=(st+dr)/2;
if(mij>=POZ)
update_arb(2*pai,st,mij,POZ,VAL);
else
update_arb(2*pai+1,mij+1,dr,POZ,VAL);
A[pai]=max(A[2*pai],A[2*pai+1]);
}
void query_arb(int pai,int st,int dr,int ST,int DR)
{
if(ST<=st&&dr<=DR)
{
raspuns=max(raspuns,A[pai]);
return;
}
int mij=(st+dr)/2;
if(mij>=ST)
query_arb(2*pai,st,mij,ST,DR);
if(mij<DR)
query_arb(2*pai+1,mij+1,dr,ST,DR);
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++)
scanf("%d",&vCit[i]);
initialize_arb(1,1,n);
int p1,p2,p3;
for(int i=1; i<=m; i++)
{
scanf("%d%d%d",&p1,&p2,&p3);
if(p1==0)
{
raspuns=-0x3f3f3f;
query_arb(1,1,n,p2,p3);
printf("%d\n",raspuns);
}
else
update_arb(1,1,n,p2,p3);
}
return 0;
}