#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#define max(a, b) (a > b? a: b)
int v[400384];
void update(int n, int l, int r, int p, int x)
{
if (l == r)
v[n] = x;
else
{
int m = (l + r) / 2;
if (p <= m)
update(2 * n, l, m, p, x);
else
update(2 * n + 1, m + 1, r, p, x);
v[n] = max(v[2 * n], v[2 * n + 1]);
}
}
int query(int n, int l, int r, int a, int b)
{
if (a <= l && r <= b)
return v[n];
int m = (l + r) / 2, r1 = 0, r2 = 0;
if (a <= m)
r1 = query(2 * n, l, m, a, b);
if (m < b)
r2 = query(2 * n + 1, m + 1, r, a, b);
return max(r1, r2);
}
int main()
{
freopen("arbint.in", "rt", stdin);
freopen("arbint.out", "wt", stdout);
int n, m;
scanf("%d%d", &n, &m);
for (int a, i = 1; i <= n; i++)
{
scanf("%d", &a);
update(1, 1, n, i, a);
}
while (m--)
{
int o, a, b;
scanf("%d%d%d", &o, &a, &b);
if (o == 0)
printf("%d\n", query(1, 1, n, a, b));
else
update(1, 1, n, a, b);
}
return 0;
}