#include <stdio.h>
#define MAXnm 100000
#define pr(x) fprintf(stderr, #x" = %d\n", x)
int n, m, p, v, f, l, max, arb [5*MAXnm];
int maxim (int a, int b)
{
if (a > b)
return a;
return b;
}
void update (int nod, int x, int y)
{
if (x == y)
{
arb [nod]=v;
return;
}
int mij=(x+y)>>1;
if (mij >= p)
update (nod<<1, x, mij);
else
update ((nod<<1)|1, mij+1, y);
arb [nod]=maxim (arb [nod<<1], arb [(nod<<1)|1]);
}
void query (int nod, int x, int y)
{
if (f <= x && l >= y)
{
max=maxim (max, arb [nod]);
return;
}
int mij=(x+y)>>1;
if (f <= mij)
query (nod<<1, x, mij);
if (l > mij)
query ((nod<<1)|1, mij+1, l);
}
int main ()
{
freopen ("arbint.in", "r", stdin);
freopen ("arbint.out", "w", stdout);
int i, x;
scanf ("%d%d", &n, &m);
for (i=1; i<=n; ++i)
{
scanf ("%d", &v);
p=i;
update (1, 1, n);
}
for (i=1; i<=4*n; ++i)
pr(arb [i]);
for (i=1; i<=m; ++i)
{
scanf ("%d%d%d", &x, &f, &l);
if (x)
{
p=f;
v=l;
update (1, 1, n);
}
else
{
max=-1;
query (1, 1, n);
printf ("%d\n", max);
}
}
return 0;
}