#include <bits/stdc++.h>
#define DIM 100000
#define int long long
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
//ifstream f("filesmodel.in");
//ofstream g("filesmodel.out");
int n,m;
int c,a,b;
int aint[4*DIM+5];
int sol;
void build(int nod,int st,int dr){
if(st == dr){
f>>aint[nod];
return;
}
int mid = (st+dr)/2;
build(2*nod,st,mid);
build(2*nod+1,mid+1,dr);
aint[nod] = max(aint[2*nod],aint[2*nod+1]);
}
void query(int nod,int st,int dr,int a,int b){
if(a<=st && dr<=b){
sol = max(sol,aint[nod]);
return;
}
int mid = (st+dr)/2;
if(a<=mid){
query(2*nod,st,mid,a,b);
}
if(mid+1<=b){
query(2*nod+1,mid+1,dr,a,b);
}
///aint[nod] = max(aint[2*nod],aint[2*nod+1]);
}
void update(int nod,int st,int dr,int poz,int val){
if(st == dr){
aint[nod] = val;
return;
}
int mid = (st+dr)/2;
if(poz<=mid){
update(2*nod,st,mid,poz,val);
}else{
update(2*nod+1,mid+1,dr,poz,val);
}
aint[nod] = max(aint[2*nod],aint[2*nod+1]);
}
signed main(){
f>>n>>m;
build(1,1,n);
while(m--){
f>>c>>a>>b;
if(c == 0){
sol = -1;
query(1,1,n,a,b);
g<<sol<<'\n';
}else{
update(1,1,n,a,b);
}
}
return 0;
}