#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m, poz, val, vec[405], stq, drq;
void update(int st, int dr, int i) {
if (st == dr) {
vec[i] = val;
return;
}
int mij = (st + dr) / 2;
if (poz <= mij)
update(st, mij, 2 * i);
else
update(mij + 1, dr, 2 * i + 1);
vec[i] = max(vec[2 * i], vec[2 * i + 1]);
}
int query(int st, int dr, int i) {
if (st == dr)
return vec[i];
if (stq <= st && dr <= drq)
return vec[i];
int mij = (st + dr) / 2, rez = 0;
if (stq <= mij)
rez = query(st, mij, 2 * i);
if (drq > mij)
rez = max(rez, query(mij + 1, dr, 2 * i + 1));
return rez;
}
void prelucrare() {
int tip;
for (int i = 0; i < m; ++i) {
f >> tip;
if (tip) {
f >> poz >> val;
update(1, n, 1);
} else {
f >> stq >> drq;
g << query(1, n, 1) << '\n';
}
}
}
void citire() {
f >> n >> m;
for (int i = 1; i <= n; ++i) {
poz = i;
f >> val;
update(1, n, 1);
}
}
int main() {
citire();
prelucrare();
return 0;
}