#include <bits/stdc++.h>
#define endl '\n';
using namespace std;
using ll = long long;

int n,q,b,x,y;
int a[100005];
int t[400005];

void build(int id, int l, int r){
    if(l == r) t[id] = a[l];
    else{
        int m = (l + r) / 2;
        build(id * 2, l, m);
        build(id * 2 + 1, m + 1, r);
        t[id] = max(t[id * 2], t[id * 2 + 1]);
    }
}

void update(int id, int l, int r, int pos, int val){
    if(l == r){
        t[id] = val;
        a[pos] = val;
        return;
    }
    else{
        int m = (l + r) / 2;
        if(pos <= m){
            update(id * 2, l, m, pos, val);
        }
        else{
            update(id * 2 + 1, m + 1, r, pos, val);
        }
        t[id] = max(t[id * 2], t[id * 2 + 1]);
    }
}

ll query(int id, int l, int r, int u, int v){
    if(v < l || r < u) return LLONG_MIN;
    if(u <= l && r <= v) return t[id];
    int m = (l + r) / 2;
    return max(query(id * 2, l , m, u, v), query(id * 2 + 1, m + 1, r, u , v));
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    //freopen("MaxiSubArr.inp","r",stdin);
    //freopen("MaxiSubArr.out","w",stdout);
    cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
    }
    build(1,1,n);
    cin >> q;
    for(int i = 1; i <= q; i++){
        cin >> b >> x >> y;
        if(b == 1){
            update(1, 1, n, x, y);
        }
        else{
            cout << query(1, 1, n, x, y) << endl;
        }
    }
    return 0;
}
