#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pi;
#define pb push_back
#define mp make_pair
#define f first
#define s second
vector<pi> st(4*100001);
pi combine(pi a, pi b){
if(a.f > b.f)
return a;
else if(b.f > a.f)
return b;
return(mp(a.f, a.s + b.s));
}
void build(vi &a, int v, int tl, int tr) {
if (tl == tr) {
st[v] = mp(a[tl], 1);
} else {
int tm = (tl + tr) / 2;
build(a, v*2, tl, tm);
build(a, v*2+1, tm+1, tr);
st[v] = combine(st[v*2], st[v*2+1]);
}
}
pi max_query(int v, int tl, int tr, int l, int r) {
if (l > r)
return mp(-1e9, 0);
if (l == tl && r == tr)
return st[v];
int tm = (tl + tr) / 2;
return combine(max_query(v*2, tl, tm, l, min(r, tm)),
max_query(v*2+1, tm+1, tr, max(l, tm+1), r));
}
void update(int v, int tl, int tr, int pos, int new_val){
if(tl == tr){
st[v] = mp(new_val, 1);
} else {
int tm = (tl + tr) / 2;
if(pos <= tm)
update(v*2, tl, tm, pos, new_val);
else
update(v*2+1, tm+1, tr, pos, new_val);
st[v] = combine(st[v*2], st[v*2+1]);
}
}
void solve(){
int n, m;
cin >> n >> m;
vi a(n);
for(int i = 0; i < n; i++)
cin >> a[i];
build(a, 1, 0, n-1);
for(int i = 0; i < m; i++){
int c, a, b;
cin >> c >> a >> b;
if(c == 0)
cout << max_query(1, 0, n-1, a-1, b-1).f << '\n';
else
update(1, 0, n-1, a-1, b);
}
}
int main(){
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
ios::sync_with_stdio(0); cin.tie(0);
int t = 1;
//cin >> t;
while(t--){
solve();
}
}