#include <stdio.h>
#include <time.h>
#include <algorithm>
#define N 131073
using namespace std;
int i, n, m, h, a, b, mx, A[N];
bool o;
void up(int k, int l, int r, int p, int val)
{
if(l == r) A[k] = val;
else
{
int m = (l + r) / 2;
if(p <= m)
up(2 * k, l, m, p, val);
else
up(2 * k + 1, m + 1, r, p, val);
A[k] = max(A[2 * k], A[2 * k + 1]);
}
}
void q(int k, int l, int r)
{
if(a <= l && r <= b)
{
if(A[k] > mx) mx = A[k];
}
else
{
int m = (l + r) / 2;
if(a <= m)
q(2 * k, l, m);
if(b > m)
q(2* k + 1, m + 1, r);
}
}
int main()
{
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
scanf("%d%d", &n, &m);
for(i = 0; i < n; i++)
{
scanf("%d", &a);
up(1, 0, n - 1, i, a);
}
while((1 << h) <= n)
h++;
for(i = 0; i < m; i++)
{
scanf("%d%d%d", &o, &a, &b);
a--;
b--;
if(o)
up(1, 0, n - 1, a, b);
else
{
mx = 0;
q(1, 0, n - 1);
printf("%d\n", mx);
}
}
return 0;
}