#include <bits/stdc++.h>
using namespace std;
int const MAXN = 262144;
ifstream in("arbint.in");
ofstream out("arbint.out");
int aint[MAXN];
void update(int poz, int val, int st, int dr, int nod){
if (st==poz && dr==poz){
aint[nod] = val;
return;
}
int mij= (st+dr)/2;
if (poz<=mij) update(poz, val, st, mij, 2*nod);
if (poz>mij) update(poz, val, mij+1, dr, 2*nod+1);
aint[nod]=max(aint[2*nod], aint[2*nod+1]);
}
int ans(int a, int b, int st, int dr, int nod){
if (a<=st && dr<=b) return aint[nod];
int mij=(st+dr)/2;
int left, right;
left=right=-1;
if (a<=mij) left=ans(a, b, st, mij, 2*nod);
if (b>mij) right=ans(a, b, mij+1, dr, 2*nod+1);
return max(left, right);
}
int main(){
// freopen("arbint.in", "r", stdin);
// freopen("arbint.out", "w", stdout);
int n, m, nr, a, b;
in >> n >> m;
for(int i=1; i<=n; ++i){
in >> nr;
update(i, nr, 1, n, 1);
}
for (int i=1; i<=m; ++i){
in >> nr >> a >> b;
if (nr==0) out << ans(a, b, 1, n, 1) << '\n';
else update(a, b, 1, n, 1);
}
}