#include <stdio.h>
using namespace std;
const long nmax=100005;
FILE *f,*g;
long n,m,i,x,y,ind,val,maxim,ic,sf,a[3*nmax];
int cod;
void update(long nod,long st, long dr)
{
long mij;
if (st==dr)
{
a[nod]=val;
}
else
{
mij=(st+dr)/2;
if (ind<=mij) update(2*nod,st,mij);
else update(2*nod+1,mij+1,dr);
if (a[2*nod]>=a[2*nod+1]) a[nod]=a[2*nod];
else a[nod]=a[2*nod+1];
}
}
void query(long nod,long st,long dr)
{
long mij;
if ((ic<=st)&&(dr<=sf))
{
if (a[nod]>maxim) maxim=a[nod];
}
else
{
mij=(st+dr)/2;
if (ic<=mij) query(2*nod,st,mij);
if (mij<sf) query(2*nod+1,mij+1,dr);
}
}
int main()
{
f=fopen("arbint.in","r");
g=fopen("arbint.out","w");
fscanf(f,"%ld%ld",&n,&m);
for (i=1;i<=n;i++)
{
fscanf(f,"%ld",&val);
ind=i;
update(1,1,n);
}
for (i=1;i<=m;i++)
{
fscanf(f,"%d%ld%ld",&cod,&x,&y);
if (cod==0)
{
maxim=0;
ic=x;sf=y;
query(1,1,n);
fprintf(g,"%ld\n",maxim);
}
else
{
ind=x;val=y;
update(1,1,n);
}
}
fclose(f);
fclose(g);
return 0;
}