#include <bits/stdc++.h>
using namespace std;
#define MaxN 100000
int arbint[4 * MaxN + 1];
int v[MaxN + 1];
int N, n, Q;
void Build()
{
for(int i = N - 1; i >= 1; i--) arbint[i] = max(arbint[2 * i], arbint[2 * i + 1]);
}
void Update(int p, int x)
{
p = N + p - 1;
arbint[p] = x;
while(p > 1)
{
int tata = p / 2;
arbint[tata] = max(arbint[2 * tata], arbint[2 * tata + 1]);
p = p / 2;
}
}
int Query(int node, int l, int r, int st, int dr)
{
if(l == st && r == dr) return arbint[node];
int m = (l + r) / 2;
if(dr <= m) return Query(2 * node, l, m, st, dr);
if(m < st) return Query(2 * node + 1, m + 1, r, st, dr);
return max(Query(2 * node, l, m, st, m), Query(2 * node + 1, m + 1, r, m + 1, dr));
}
int main(){
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
int i, op, a, b;
cin >> n >> Q;
for(N = 1; N < n; N = N * 2);
for(i = 1; i <= n; i++)
{
cin >> v[i];
arbint[N + i - 1] = v[i];
}
Build();
while(Q--)
{
cin >> op >> a >> b;
if(op == 0) {
cout << Query(1, 1, N, a, b) << '\n';
} else {
Update(a, b);
}
}
return 0;
}