// problem:
#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define mk make_pair
#define lob lower_bound
#define upb upper_bound
#define fi first
#define se second
#define SZ(x) ((int)(x).size())

typedef unsigned int uint;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;

template<typename T> inline void ckmax(T & x, T y) {
	x = (y > x ? y : x);
}
template<typename T> inline void ckmin(T & x, T y) {
	x = (y < x ? y : x);
}

const int n = 100352;
const int lgbt = 9;
const int b = 1 << lgbt;
 
int indexes[lgbt + 1][n];
int values[lgbt + 1][n];
int arr[n];
 
void merge(int k, int l) {
    int end = k + (1 << l);
    int mid = k + (1 << (l - 1));
    int x = mid;
    int y = k;
    for (int z = k; z < end; z++) {
        if (y < mid && (x == end || values[l - 1][y] + (x - mid) < values[l - 1][x])) {
            indexes[l][z] = indexes[l - 1][y];
            values[l][z] = values[l - 1][y] + (x - mid);
            y++;
        } else {
            indexes[l][z] = indexes[l - 1][x];
            values[l][z] = values[l - 1][x];
            x++;
        }
    }
}
 
void assign(int k) {
    for (int x = k; x < k + b; x++) {
        arr[indexes[lgbt][x]] = values[lgbt][x];
    }
}
 
int find(int k, int x) {
    int upper = b;
    int lower = 0;
    while (upper > lower) {
        int mid = (upper + lower) / 2;
        if (x + mid < values[lgbt][k + mid]) {
            upper = mid;
        } else {
            lower = mid + 1;
        }
    }
    return x + upper;
}
 
void update(int k) {
    for (int l = 1; l <= lgbt; l++) {
        k = (k >> l) << l;
        merge(k, l);
    }
    assign(k);
}
 
int calc(int k) {
    int x = arr[k];
    k = ((k >> lgbt) << lgbt) + b;
    for (; k < n; k += b) {
        x = find(k, x);
    }
    return x;
}
 
int main() {
	ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int nActual;
    cin >> nActual;
    for (int x = 0; x < n; x++) {
        indexes[0][x] = x;
        if (x < nActual) {
            int a;
            cin >> a;
            values[0][x] = x - a;
        } else {
            values[0][x] = x;
        }
    }
    for (int l = 1; l <= lgbt; l++) {
        for (int k = 0; k < n; k += 1 << l) {
            merge(k, l);
        }
    }
    for (int k = 0; k < n; k += b) {
        assign(k);
    }
    int q;
    for (cin >> q; q; q--) {
        int type, k;
        cin >> type >> k;
        k--;
        if (type == 1) {
            int a;
            cin >> a;
            values[0][k] = k - a;
            update(k);
        } else {
            cout << calc(k) + 1 << ' ';
        }
    }
    cout << '\n';
    return 0;
}