#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define lowbit(x) ((x)&(-(x)))
#define mid ((l+r)>>1)
#define lson rt<<1, l, mid
#define rson rt<<1|1, mid+1, r
#define fors(i, a, b) for(int i = (a); i < (b); ++i)
#define all(vec) vec.begin(),vec.end()
using namespace std;
const int B = sqrt(1e5 + 5);
const int maxn = 1e5 + 5;
int bel[maxn], L[maxn], R[maxn];
int n, b[maxn];
#define P pair<int,int>
vector<int> t[maxn];
void build(int rt, int l, int r){
    if(l == r){
        t[rt].clear();
        t[rt].pb(0); t[rt].pb(b[l]+1);
        return;
    }
    t[rt].resize(r-l+2);
    build(lson); build(rson);
    for(int i = 0, j = 0; i < t[rt<<1].size(); ++i){
        int l = t[rt<<1][i], r;
        if(i+1==t[rt<<1].size()) r = n; else r = t[rt<<1][i+1]-1;
        while(j-i < t[rt<<1|1].size() && r+i >= t[rt<<1|1][j-i]){
            t[rt][j] = max(t[rt<<1|1][j-i]-i, l);
            j++;
        }
    }return;
}
vector<int> ps[maxn];
void sol(int id){
    build(1, L[id], R[id]);
    ps[id] = t[1]; return;
}
int main()
{

    cin>>n; bel[0] = -1;
    fors(i,1,n+1) {
        scanf("%d", &b[i]); b[i] = i-b[i]-1;
        bel[i] = i/B;
        if(bel[i]!=bel[i-1]) L[bel[i]] = i;
        R[bel[i]] = i;
    }
    fors(i,1/B,n/B+1)
    {
        sol(i);
    }
    int q; cin>>q;
    while(q--){
        int op; scanf("%d", &op);
        if(op == 1){
            int i, x; scanf("%d%d", &i, &x);
            b[i] = i-1-x; sol(bel[i]);
        }else{
            int x; scanf("%d", &x);
            int ans = b[x]+1;
            fors(i,x+1,R[bel[x]]+1) if(b[i]+1 <= ans) ans++;
            fors(i,bel[x]+1,n/B+1) ans += upper_bound(all(ps[i]), ans)-ps[i].begin()-1;
            printf("%d\n", ans);
        }
    }
	return 0;
}
/*
5
0 1 0 0 4
5
2 1
2 2
2 3
2 4
2 5

*/
