#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, i, a[100002], v[400002];
int t, op, poz, val, qx, qy;
static inline void Build(int st, int dr, int nod) {
if(st == dr) v[nod] = a[st];
else {
int mij = st + (dr - st) / 2;
Build(st , mij, 2 * nod );
Build(mij + 1, dr , 2 * nod + 1);
v[nod] = max(v[2 * nod], v[2 * nod + 1]);
}
}
static inline void Update(int st, int dr, int nod) {
if(st == dr) v[nod] = val;
else {
int mij = st + (dr - st) / 2;
if(poz <= mij) Update(st , mij, 2 * nod );
else Update(mij + 1, dr , 2 * nod + 1);
v[nod] = max(v[2 * nod], v[2 * nod + 1]);
}
}
static inline int Query(int st, int dr, int nod) {
if(qx <= st && dr <= qy) return v[nod];
else {
int mij = st + (dr - st) / 2;
if(qy <= mij) return Query(st , mij, 2 * nod);
if(mij + 1 <= qx) return Query(mij + 1, dr , 2 * nod + 1);
return max(Query(st , mij, 2 * nod),
Query(mij + 1, dr , 2 * nod + 1));
}
}
int main() {
fin >> n >> t;
for(i = 1; i <= n; i++) fin >> a[i];
Build(1, n, 1);
while(t--) {
fin >> op;
if(op == 0) {
fin >> qx >> qy; /// pt ca qa si qb sunt naspa
fout << Query(1, n, 1) << "\n";
}
else {
fin >> poz >> val;
Update(1, n, 1);
}
}
return 0;
}