#include <fstream>
#define NMAX 100007
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int Arbi[4 * NMAX];
int n, m, Ans;
void update(int Node, int st, int dr, int poz, int val){
if(st == dr){
Arbi[Node] = val;
return ;
}
int med = (st + dr) >> 1;
if(poz > med)
update(Node * 2 + 1, med + 1, dr, poz, val);
else
update(Node * 2, st, med, poz, val);
Arbi[Node] = max(Arbi[Node * 2], Arbi[Node * 2 + 1]);
}
void query(int Node, int st, int dr, int x, int y){
if(st >= x && dr <= y){
Ans = max(Ans, Arbi[Node]);
return ;
}
int med = (st + dr) >> 1;
if(med >= x)
query(Node * 2, st, med, x, y);
if(med < y)
query(Node * 2 + 1, med + 1, dr, x, y);
}
int main(){
cin >> n >> m;
for(int i = 1; i <= n; ++i){
int a;
cin >> a;
update(1, 1, n, i, a);
}
while(m--){
int Type, a, b;
cin >> Type >> a >> b;
if(Type == 0){
Ans = 0;
query(1, 1, n, a, b);
cout << Ans << "\n";
}
else
update(1, 1, n, a, b);
}
return 0;
}