#include <cstdio>
#include <algorithm>
#define Nmax 200010
using namespace std;
int N, M, A[Nmax], poz, nr, op, a, b, Max;
void Update(int li, int lf, int ind)
{
if (li >= lf)
{
A[ind] = nr;
return;
}
int mij = (li + lf) / 2;
if (poz <= mij)
Update(li, mij, 2 * ind);
else
Update(mij + 1, lf, 2 * ind + 1);
A[ind] = max(A[2 * ind], A[2 * ind + 1]);
}
void Citire()
{
scanf("%d %d", &N, &M);
for (poz = 1; poz <= N; ++poz)
{
scanf("%d", &nr);
Update(1, N, 1);
}
}
void Query(int li, int lf, int ind)
{
if (a <= li && b >= lf)
{
Max = max(Max, A[ind]);
return;
}
int mij = (li + lf) / 2;
if (a <= mij)
Query(li, mij, 2 * ind);
if (b > mij)
Query(mij + 1, lf, 2 * ind + 1);
}
void Operatii()
{
for (int i = 1; i <= M; ++i)
{
scanf("%d %d %d", &op, &a, &b);
if (!op)
{
Max = -1;
Query(1, N, 1);
printf("%d\n", Max);
}
else
{
nr = b;
poz = a;
Update(1, N, 1);
}
}
}
int main()
{
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
Citire();
Operatii();
return 0;
}