#include <cstdio>
#define Nmax 400010
int N, M, x, A[Nmax], p, a, b, max;
void Update(int i, int m, int M)
{
if (m == M)
{
A[i] = x;
return;
}
int mij = (m + M) / 2;
if (p <= mij)
Update(2 * i, m, mij);
else
Update(2 * i + 1, mij + 1, M);
if (A[2 * i] > A[2 * i + 1])
A[i] = A[2 * i];
else
A[i] = A[2 * i + 1];
}
void Query(int i, int s, int d)
{
if (a <= s && b >= d)
{
if (max < A[i])
max = A[i];
return;
}
int mij = (s + d) / 2;
if (a <= mij)
{
Query(2 * i, a, mij);
}
if (b > mij)
{
Query(2 * i + 1, mij + 1, b);
}
}
void Citire()
{
int t;
scanf("%d %d", &N, &M);
for (p = 1; p <= N; ++p)
{
scanf("%d", &x);
Update(1, 1, N);
}
for (int i = 1; i <= M; ++i)
{
scanf("%d %d %d", &t, &a, &b);
if (t == 0)
{
max = -1;
Query(1, 1, N);
printf("%d\n", max);
}
else if (t == 1)
{
x = b;
p = a;
Update(1, 1, N);
}
}
}
int main()
{
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
Citire();
return 0;
}