#include <bits/stdc++.h>
using namespace std;
#if 1
#define cin fin
#define cout fout
ifstream fin("arbint.in");
ofstream fout("arbint.out");
#endif // 1
const int nmx = 1e5 + 5;
int a[nmx];
int t[nmx*4];
void create(int idx,int st,int dr){
if(st == dr){
t[idx] = a[st];
}
else{
int md = (st + dr)/2;
create(idx*2,st,md);
create(idx*2+1,md+1,dr);
t[idx] = max(t[idx*2],t[idx*2+1]);
}
}
int q(int idx,int st,int dr,int a,int b){
if(a>b)
return 0;
if(st == a && dr == b){
return t[idx];
}
else {
int md = (st + dr)/2;
return max(q(idx*2,st,md,a,min(b,md)),
q(idx*2+1,md+1,dr,max(a,md+1),b));
}
}
void update(int idx,int st,int dr,int p,int nv){
if(st == dr){
t[idx] = nv;
}
else{
int md = (st + dr)/2;
if(p <= md)
update(idx*2,st,md,p,nv);
else
update(idx*2+1,md+1,dr,p,nv);
t[idx] = max(t[idx*2],t[idx*2+1]);
}
}
int main(){
int n,m;
cin >> n >> m;
for(int i=1;i<=n;i++){
cin >> a[i];
}
create(1,1,n);
while(m--){
int op,x,y;
cin >> op >> x >> y;
if(op == 0){
cout << q(1,1,n,x,y) << "\n";
}
else if(op == 1){
update(1,1,n,x,y);
}
}
}