#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m;
int arb[410000];
void dep(int p, int & d, int st = 1, int en = n){
int m = (st+en)/2;
if(st == en){
return;
}else if(p >= st && p <= m){
d *= 2;
dep(p, d, st, m);
}else if(p >= m+1 && p <= en){
d *= 2;
d += 1;
dep(p, d, m+1, en);
}
}
void rep(int p, int a){
int d = 1;
dep(p, d);
arb[d] = a;
for(int i = d/2; i >= 1; i /= 2){
arb[i] = max(arb[i*2], arb[i*2+1]);
}
}
int cal(int a, int b, int p = 1, int st = 1, int en = n){
if(st == a && en == b){
return arb[p];
}
int m = (st+en)/2;
if(a >= st && a <= m){
if(b <= m){
return cal(a, b, 2*p, st, m);
}else{
return max(cal(a, m, 2*p, st, m), cal(m+1, b, 2*p+1, m+1, en));
}
}else{
return cal(a, b, 2*p+1, m+1, en);
}
}
int main(){
fin >> n >> m;
for(int i = 1; i <= n; i++){
int a;fin >> a;
rep(i, a);
}
for(int i = 0; i < m; ++i){
int op, a, b;
fin >> op >> a >> b;
if(op == 0){
fout << cal(a, b) << "\n";
}else{
rep(a, b);
}
}
return 0;
}