#include<stdio.h>
int n,q,v[100005],ai[400000],a,b;
void cst(int k, int st, int dr)
{
if (st==dr)
{
ai[k]=v[st];
return;
}
int mij=(st+dr)/2;
cst(2*k,st,mij);
cst(2*k+1,mij+1,dr);
ai[k]=ai[k*2];
if (ai[k]<ai[k*2+1])
ai[k]=ai[k*2+1];
}
int getmax(int k, int st, int dr)
{
if (st>=a && dr<=b)
return ai[k];
int mij=(st+dr)/2;
int val1=0,val=0;
if (mij>=a)
val=getmax(2*k,st,mij);
if (mij<b)
val1=getmax(2*k+1,mij+1,dr);
if (val1>val)
return val1;
else
return val;
}
void update( int k, int st, int dr)
{
if (st==dr)
{
ai[k]=v[a];
return;
}
int mij=(st+dr)/2;
if (mij>=a)
update(k*2,st, mij);
else
update (k*2+1, mij+1, dr);
ai[k]=ai[k*2];
if (ai[k]<ai[k*2+1])
ai[k]=ai[k*2+1];
}
int main ()
{
int op,i,j,max2,val;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&q);
for (i=1;i<=n;i++)
{
scanf("%d",&val);
v[i]=val;
}
cst(1,1,n);
for (i=1;i<=q;i++)
{
scanf("%d%d%d",&op,&a,&b);
if (op==0)
{
max2=getmax (1,1,n);
printf("%d\n",max2);
}
else
{
v[a]=b;
update (1,1,n);
}
}
return 0;
}