// https://www.infoarena.ro/problema/arbint
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int nmax = 100000;
const int jos = -1e9 - 10;
int aint[4 * nmax + 5];
int v[nmax + 5];
int query(int nod, int st, int dr, int l, int r) {
if(l <= st && dr <= r)
return aint[nod];
int med = (st + dr) / 2;
int ans = jos;
if(l <= med)
ans = max(ans, query(nod * 2, st, med, l, r));
if(med + 1 <= r)
ans = max(ans, query(nod * 2 + 1, med + 1, dr, l, r));
return ans;
}
void update(int nod, int st, int dr, int poz, int val) {
if(st >= dr) {
aint[nod] = val;
return;
}
int med = (st + dr) / 2;
if(poz <= med)
update(nod * 2, st, med, poz, val);
else
update(nod * 2 + 1, med + 1, dr, poz, val);
aint[nod] = max(aint[nod * 2], aint[nod * 2 + 1]);
}
int cnt;
void build(int nod, int st, int dr) {
if(st == dr) {
aint[nod] = v[++cnt];
return;
}
int med = (st + dr) / 2;
build(nod * 2, st, med);
build(nod * 2 + 1, med + 1, dr);
aint[nod] = max(aint[nod * 2], aint[nod * 2 + 1]);
}
int main()
{
int n, m;
fin >> n >> m;
for(int i = 1; i <= n; i++)
fin >> v[i];
build(1, 1, n);
while(m--) {
int tip, a, b;
fin >> tip >> a >> b;
if(tip == 0)
fout << query(1, 1, n, a, b) << "\n";
else
update(1, 1, n, a, b);
}
return 0;
}