#include <iostream>
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n, m, mx, sgt[300000], v[100005];
void update(int l, int r, int node){
if(l==r){
sgt[node]=v[l];
return;
}
int m=(l+r)/2;
update(l, m, 2*node);
update(m+1, r, 2*node+1);
sgt[node]=max(sgt[node*2], sgt[node*2+1]);
}
void query(int l, int r, int ql, int qr, int node){
if(ql<=l&&r<=qr){mx=max(mx, sgt[node]);return;}
int m=(l+r)/2;
if(ql<=m)query(l, m, ql, qr, node*2);
if(m<qr)query(m+1, r, ql, qr, node*2+1);
}
int main(){
in>>n>>m;
int o, a, b;
for(int i=1; i<=n; i++)in>>v[i], update(1, n, 1);
for(int i=1; i<=m; i++){
in>>o>>a>>b;
if(!o){
mx=0;
query(1, n, a, b, 1);
out<<mx<<"\n";
}else{
v[a]=b;
update(1, n, 1);
}
}
return 0;
}