#include <iostream>
using namespace std;
const int C = 4e5 + 1;
int aint[C];
void build_aint(int poz, int l, int r){
if(l == r){
cin >> aint[poz];
return;
}
int mij = (l + r) / 2;
build_aint(poz * 2, l, mij);
build_aint(poz * 2 + 1, mij + 1, r);
aint[poz] = max(aint[poz * 2], aint[poz * 2 + 1]);
}
void change(int poz, int l, int r, int p, int val){
if(l == p && l == r){
aint[poz] = val;
return;
}
int mij = (l + r) / 2;
if(p <= mij)
change(poz * 2, l, mij, p, val);
else
change(poz * 2 + 1, mij + 1, r, p, val);
aint[poz] = max(aint[poz * 2], aint[poz * 2 + 1]);
}
int maxim(int poz, int l, int r, int a, int b){
if(a > r || b < l)
return 0;
if(l >= a && r <= b)
return aint[poz];
int mij = (l + r) / 2;
int max_l = maxim(2 * poz, l, mij, a, b);
int max_r = maxim(2 * poz + 1, mij + 1, r, a, b);
return max(max_l, max_r);
}
int main()
{
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
int n, q, a, b;
bool qtype;
cin >> n >> q;
build_aint(1, 1, n);
while(q--){
cin >> qtype >> a >> b;
if(qtype == 0){
cout << maxim(1, 1, n, a, b) << '\n';
}
else{
change(1, 1, n, a, b);
}
}
// for(int i = 1; i <= 4 * n; i++)
// cout << aint[i] << " ";
return 0;
}