#include<iostream>
#include<fstream>
using namespace std;
int a[400001], n;
int suma(int n, int st, int dr, int x, int y){
int v1 = 0, v2 = 0, mij = (st + dr) / 2;
if(st >= x && y >= dr)
return a[n];
if(x <= mij)
v1 = suma(n * 2, st, mij, x, y);
if(y > mij)
v2 = suma(n * 2 + 1, mij + 1, dr, x, y);
return max(v1, v2);
}
void update(int n, int st, int dr, int pozitie, int valoare){
if(st == dr) {
a[n] = valoare;
return;
}
int mij = (st + dr) / 2;
if(pozitie <= mij)
update(n * 2, st, mij, pozitie, valoare);
else
update(n * 2 + 1, mij + 1, dr, pozitie, valoare);
a[n] = max(a[2 * n], a[2 * n + 1]);
}
int main()
{
int m, x, op, y, i;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
fin >> n >> m;
for(i = 1; i <= n; i++) {
fin >> x;
update(1, 1, n, i, x);
}
for(i = 0; i < m; i++) {
fin >> op >> x >> y;
if(op == 0)
fout << suma(1, 1, n, x, y) << '\n';
else
update(1, 1, n, x, y);
}
return 0;
}