#include <cstdio>
#include <algorithm>
#include <iostream>
#define DIM 1000005
using namespace std;
int N, K, A[DIM], S, F, V, P, M;
void Update(int nod, int st, int dr)
{
if (st == dr)
{
A[nod] = V;
return;
}
int pivot = (st + dr) / 2;
if (P <= pivot) Update(2 * nod, st, pivot);
else Update(2 * nod + 1, pivot + 1, dr);
A[nod] = max(A[2 * nod], A[2 * nod + 1]);
}
void Query(int nod, int st, int dr)
{
if (S <= st && dr <= F)
{
M = max(M, A[nod]);
return;
}
int pivot = (st + dr) / 2;
if (S <= pivot) Query(2 * nod, st, pivot);
if (F > pivot) Query(2 * nod + 1, pivot + 1, dr);
}
int main()
{
FILE *fin = fopen("arbint.in", "r");
FILE *fout = fopen("arbint.out", "w");
fscanf(fin, "%d%d", &N, &K);
for (int i = 1; i <= N; i++)
{
fscanf(fin, "%d", &V);
P = i;
Update(1, 1, N);
}
int X;
for (int i = 1; i <= K; i++)
{
fscanf(fin, "%d", &X);
if (!X)
{
M = -1;
fscanf(fin, "%d%d", &S, &F);
//cout << S << " " << F << "\n";
Query(1, 1, N);
fprintf(fout, "%d\n", M);
}
else
{
fscanf(fin, "%d%d", &P, &V);
Update(1, 1, N);
}
}
fclose(fin);
fclose(fout);
return 0;
}