#include <stdio.h>
int n,m,d[400100],c,x,y,p,vp,mx;
void find(int p, int a, int b)
{
int v=(a+b)/2;
if (a>=x && b<=y)
{
if (mx<d[p]) mx=d[p];
return;
}
if (x<=v) find(p*2,a,v);
if (y>v) find(p*2+1,v+1,b);
}
void update(int p, int a, int b)
{
if (a==b)
{
d[p]=y;
return;
}
int v=(a+b)/2;
if (x<=v) update(p*2,a,v);
else update(p*2+1,v+1,b);
int mx=d[p*2];
if (mx<d[p*2+1]) mx=d[p*2+1];
d[p]=mx;
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
int i,j;
p=0;
vp=1;
while (vp<n) vp=1<<(++p);
for (i=vp; i<vp+n; ++i)
scanf("%d",&d[i]);
for (i=p-1; i>0; --i)
for (j=1<<i; j<1<<(i+1); ++j)
{
mx=d[j*2];
if (d[j*2+1]>mx) mx=d[j*2+1];
d[j]=mx;
}
for (i=1; i<=m; ++i)
{
scanf("%d%d%d",&c,&x,&y);
if (c==0)
{
mx=-1;
find(1,1,vp);
printf("%d\n",mx);
}
else
{
update(1,1,vp);
}
}
return 0;
}