#include <cstdio>
#define FIN "arbint.in"
#define FOUT "arbint.out"
#define N 100010
int p, v, maxim, a[4* N + 100], n, m;
int max(int a, int b)
{
return (a > b) ? a : b;
}
void update(int x, int l, int r)
{
int mid;
if (l == r)
a[x] = v;
else
{
mid = (l + r) >> 1;
if (p <= mid)
update(2 * x, l, mid);
else
update(2 * x + 1, mid + 1, r);
a[x] = max (a[2 * x], a[2 * x + 1]);
}
}
void query(int x, int l, int r)
{
int mid;
if (p <= l && r <= v)
{
maxim = max(a[x], maxim);
return;
}
mid = (l + r) >> 1;
if (p <= mid)
query(2 * x, l, mid);
if (v > mid)
query(2 * x + 1, mid + 1, r);
}
int main()
{
int i, t;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d%d", &n, &m);
for (p = 1; p <= n; ++p)
{
scanf("%d", &v);
update(1, 1, n);
}
for (int i = 1; i <= m; ++i)
{
scanf("%d", &t);
if (t)
{
scanf("%d%d", &p, &v);
update(1, 1, n);
}
else
{
maxim = 0;
scanf("%d%d", &p, &v);
query(1, 1, n);
printf("%d\n", maxim);
}
}
}