#include <bits/stdc++.h>
using namespace std ;
const int MAX = 1e5 + 14 ;
int aint [MAX << 4] ;
void update (int nod, int st, int dr, int pos, int val) {
if (st == dr) {
aint [nod] = val ;
return ;
}
int mij = (st + dr) >> 1 ;
if (pos <= mij) {
update (nod * 2, st, mij, pos, val) ;
}
else {
update (nod * 2 + 1, mij + 1, dr, pos, val) ;
}
aint [nod] = max (aint [nod * 2], aint [nod * 2 + 1]) ;
}
int Q (int nod, int st, int dr, int a, int b) {
if (a <= st and dr <= b) return aint [nod] ;
int l = 0, r = 0 ;
int mij = (st + dr) >> 1 ;
if (a <= mij) l = Q (nod * 2, st, mij, a, b) ;
if (b > mij) r = Q (nod * 2 + 1, mij + 1, dr, a, b) ;
return max (l, r) ;
}
int main(int argc, char const *argv[])
{
ios : sync_with_stdio (false) ;
freopen ("arbint.in", "r", stdin) ;
freopen ("arbint.out", "w", stdout) ;
int n, m ;
cin >> n >> m ;
for (int i = 1 ; i <= n ; ++ i) {
int x ;
cin >> x ;
update (1, 1, n, i, x) ;
}
while (m --) {
int t ;
cin >> t ;
if (t) {
int pos, val ;
cin >> pos >> val ;
update (1, 1, n, pos, val) ;
}
else {
int a, b ;
cin >> a >> b ;
cout << Q (1, 1, n, a, b) << '\n' ;
}
}
return 0;
}