#include<stdio.h>
#define DIM 100005
int v[3*DIM],maxim;
int max (int x,int y)
{
if(x<y)
return y;
return x;
}
void arbint (int st,int dr,int x,int val,int k)
{
int mij=(st+dr)/2;
if(st==dr)
v[k]=val;
else
{
if(k<=mij)
arbint(st,mij,x,val,2*k);
else
arbint(mij+1,dr,x,val,2*k+1);
v[k]=max(v[2*k],v[2*k+1]);
}
}
void query (int x,int y,int st,int dr,int k)
{
if(st>=x && dr<=y)
{
if (v[k]>maxim)
maxim=v[k];
}
else
{
int mij=(st+dr)/2;
if (x<=mij)
query(x,y,st,mij,2*k);
if (y>mij)
query(x,y,mij+1,dr,2*k+1);
}
}
int main ()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int i,q,x,y,n,m,a;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
{
scanf("%d",&a);
arbint(1,n,i,a,1);
}
for(i=1;i<=m;++i)
{
scanf("%d%d%d",&q,&x,&y);
if(q==0)
{
maxim=-1;
query(x,y,1,n,1);
printf("%d\n",maxim);
}
else
arbint(1,n,x,y,1);
}
return 0;
}