#include <stdio.h>
long n, m, i, j, a, b, x, arb[400000];
int tip;
long interogare(long nod, long st, long dr, long a, long b);
void modif(long nod, long st, long dr, long poz, long val);
long max(long a, long 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);
modif(1, 1, n, i, x);
}//for i
for (i=0; i<m; i++)
{
scanf("%d%ld%ld", &tip, &a, &b);
if (tip==0)
printf("%ld\n", interogare(1, 1, n, a, b));
if (tip==1)
modif(1, 1, n, a, b);
}//for i
return 0;
}//main
long interogare(long nod, long st, long dr, long a, long b)
{
long mij, rez;
if ((a<=st)&&(dr<=b))
return arb[nod];
mij=(st+dr)/2;
rez=-1;
if (a<=mij)
rez=max(rez, interogare(2*nod, st, mij, a, b));
if (b>mij)
rez=max(rez, interogare(2*nod+1, mij+1, dr, a, b));
return rez;
}//interogare
void modif(long nod, long st, long dr, long poz, long val)
{
if (st==dr)
arb[nod]=val;
else
{
int mij=(st+dr)/2;
if (poz<=mij)
modif(2*nod, st, mij, poz, val);
else
modif(2*nod+1, mij+1, dr, poz, val);
arb[nod]=max(arb[2*nod], arb[2*nod+1]);
}//else
}//modif
long max(long a, long b)
{
if (a>b)
return a;
else
return b;
}//max