#include<fstream.h>
#include<stdio.h>
#include<algorithm>
using namespace std;
#define maxim(a, b) (a>b? a:b)
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]=maxim(ai[k*2],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 val=0;
if (mij>=a)
val=getmax(2*k,st,mij);
if (mij<b)
val=maxim(val, getmax(2*k+1,mij+1,dr));
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]=maxim(ai[k*2],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;
}