#include <stdio.h>
#define nmax 100005
long a, b, op, v[2*nmax], max, n, m, i, x;
void calc(long st, long dr, long nod)
{
if ((a<=st)&&(dr<=b))
{
if (v[nod]>max)
max=v[nod];
}
else
{
long mij=(st+dr)/2-1+(st+dr)%2;
if (a<=mij)
calc(st,mij,nod*2);
if (mij+1<=b)
calc(mij+1,dr,nod*2+1);
}
}
void schimbare(long st, long dr, long nod)
{
long mij=(st+dr)/2-1+(st+dr)%2;
if (st!=dr)
{
if (a<=mij)
schimbare(st,mij,nod*2);
else
schimbare(mij+1,dr,nod*2+1);
v[nod]=v[nod*2];
if (v[nod*2+1]>v[nod])
v[nod]=v[nod*2+1];
}
else
v[nod]=b;
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%ld %ld",&n,&m);
for (i=1;i<=n;i++)
{
scanf("%ld",&x);
a=i; b=x;
schimbare(1,n,1);
}
for (i=1;i<=m;i++)
{
scanf("%ld %ld %ld",&op,&a,&b); max=-1;
if (op==0)
{
calc(1,n,1);
printf("%ld\n",max);
}
if (op==1)
schimbare(1,n,1);
}
return 0;
}