#include<iostream>
#include<fstream>
using namespace std;
ifstream cit("arbint.in");
ofstream afis("arbint.out");
int N, M, a, b, nr, maximul, op;
int arb[400101];
void update(int poz, int st, int dr, int i, int val){
if(st == dr){
arb[poz] = val;
}
else{
int mij = (st + dr)/2;
if(i > mij){
update(2*poz + 1, mij + 1, dr, i, val);
}
else{
update(2*poz, st, mij, i, val);
}
arb[poz] = max(arb[2*poz], arb[2*poz + 1]);
}
}
void maxim(int poz, int st, int dr, int a, int b){
if((a <= st) && (dr <= b)){
maximul = max(maximul, arb[poz]);
return;
}
int mij = (st + dr)/2;
if(a <= mij){
maxim(2*poz, st, mij, a, b);
}
if(mij < b){
maxim(2*poz + 1, mij + 1, dr, a, b);
}
}
int main()
{
cit>>N>>M;
for(int i = 1; i <= N; i++){
cit>>nr;
update(1, 1, N, i, nr);
}
for(int i = 1; i <= M; i++){
cit>>op>>a>>b;
if(op == 0){
maximul = 0;
maxim(1, 1, N, a, b);
afis<<maximul<<"\n";
}
else{
update(1, 1, N, a, b);
}
}
return 0;
}