#include<stdio.h>
int m,x,i,j,s[600000],n,max,b,a,poz;
void baga(int nod,int st,int dr)
{
int m;
m=(st+dr)/2;
if (st==poz&&dr==poz)
{
s[nod]=x;
return;
}
if (poz<=m) baga(nod*2,1,m);
else baga(nod*2+1,m+1,dr);
if (s[2*nod]>s[2*nod+1]) s[nod]=s[2*nod];
else s[nod]=s[2*nod+1];
}
void rezolva(int nod,int st,int dr)
{
int m;
if (st>=a&&dr<=b)
{
if (s[nod]>max) max=s[nod];
return;
}
m=(st+dr)/2;
if (a<=m) rezolva(2*nod,1,m);
if (a>m) rezolva(2*nod+1,m+1,dr);
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++)
{
scanf("%d",&x);
poz=i;
baga(1,1,n);
}
for (i=1;i<=m;i++)
{
scanf("%D%D%D\n",&x,&a,&b);
if (x==0)
{
max=-1;
rezolva(1,1,n);
printf("%d\n",max);
}
if (x==1)
{
x=b;
poz=a;
baga(1,1,n);
}
}
return 0;
}