// intervallumfa
#include <stdio.h>
long fa[400010]; // lehet nagyobb kell
long x,i,n,m,op,a,b,maxi;
long maxim(long q, long w)
{
if(q>w) { return q; } else { return w; };
}
// betesszuk a faba
int update(long val,long poz,long nod,long bal,long jobb)
{
long koz;
if(bal==jobb)
{ fa[nod]=val; }
else
{
koz=bal+(jobb-bal)/2;
if(poz<=koz)
{ update(val,poz,2*nod,bal,koz); }
else
{ update(val,poz,2*nod+1,koz+1,jobb); }
fa[nod]=maxim(fa[2*nod],fa[2*nod+1]);
}
return 0;
}
// lekerdezzuk a fabol a max ot
int query(long nod,long bal,long jobb,long kezd,long veg)
{
long k;
if(kezd<=bal&&veg>=jobb)
{ maxi=maxim(maxi,fa[nod]); }
else
{
k=bal+(jobb-bal)/2;
if(kezd<=k) query(2*nod,bal,k,kezd,veg);
if(veg>k) query(2*nod+1,k+1,jobb,kezd,veg);
}
return 0;
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%ld %ld\n",&n, &m);
for(i=1;i<=n;++i)
{
scanf("%ld ",&x);
update(x,i,1,1,n);
}
scanf("\n");
for(i=1;i<=m;++i)
{
scanf("%ld %ld %ld\n",&op,&a,&b);
if(op==0)
{
maxi=0;
query(1,1,n,a,b);
printf("%ld\n",maxi);
} else
{
update(b,a,1,1,n);
}
}
return 0;
}