#include<stdio.h>
using namespace std;
const int N = 100005;
int v[N], val, x;
int maxim (int a, int b)
{
return a < b ? b : a;
}
void actualizare (int st, int dr, int p)
{
if (st == dr)
{
v[p] = val;
return;
}
int jum = (dr + st) >> 1;
if (x <= jum)
actualizare (st, jum, p * 2);
else
actualizare (jum + 1, dr, p * 2 + 1);
v[p] = maxim (v[p * 2], v[p * 2 + 1]);
}
int a, b;
int interog (int st, int dr, int p)
{
if (a <= st && b >= dr)
return v[p];
int jum = (st + dr) >> 1, sol = -1;
if (a <= jum)
sol = maxim (-1, interog (st, jum, p * 2));
if (b > jum)
sol = maxim (sol, interog (jum + 1, dr, p * 2 + 1));
return sol;
}
int main ()
{
FILE *in, *out;
in = fopen ("arbint.in", "r");
out = fopen ("arbint.out", "w");
int n, m;
fscanf (in, "%d%d", &n, &m);
int i;
for (i = 1; i <= n; i++)
{
fscanf (in, "%d", &val);
x = i;
actualizare (1, n, 1);
}
int cerinta;
for (i = 1; i <= m; i++)
{
fscanf (in, "%d", &cerinta);
if (cerinta == 0)
{
fscanf (in, "%d%d", &a, &b);
fprintf (out, "%d\n", interog (1, n, 1));
}
else
{
fscanf (in, "%d%d", &x, &val);
actualizare(1, n, 1);
}
}
return 0;
}