#include<stdio.h>
#define NMAX 100010
int q,c,m1,m2,w,x[NMAX],a[NMAX*5+1],rez,i,j,n,m,k,l,b,s,t;
inline int max(int a,int b)
{
if (a>b)
return a;
return b;
}
void modify(int k,int s,int t)
{
if (s==t)
{
a[k]=c;
return ;
}
int q=(s+t)/2;
if (b<=q)
modify(2*k,s,q);
if (c>q)
modify(2*k+1,q+1,t);
a[k]=max(a[2*k],a[2*k+1]);
}
void query(int k,int s,int t)
{
if (s>=b&&t<=c)
{
if (rez<a[k])
rez=a[k];
return;
}
int q=(s+t)/2;
if (b<=q)
query(2*k,s,q);
if (c>q)
query(2*k+1,q+1,t);
}
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[i]);
b=i;
c=x[i];
modify(1,1,n);
}
for (i=1;i<=m;i++)
{
scanf("%d%d%d",&w,&b,&c);
if (w==1)
modify(1,1,n);
else
{
rez=-1;
query(1,1,n);
printf("%d\n",rez);
}
}
return 0;
}