/** vaziat sorati ghermeze **/

#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx")
#include <bits/stdc++.h>
using namespace std;

typedef long long                   ll;
typedef long double                 ld;
typedef pair<int,int>               pii;
typedef pair<ll,ll>                 pll;
#define all(x)                      (x).begin(),(x).end()
#define F                           first
#define S                           second
#define Mp                          make_pair
#define SZ(x)			    		(int)x.size()
#define fast_io                     ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define file_io                     freopen("in.txt" , "r+" , stdin) ; freopen("out.txt" , "w+" , stdout);

const int N = 1e5 + 10;
const ll mod = 1e9 + 7;
const ll mod2 = 998244353;
const ll inf = 8e18;
const int LOG = 17;
const int B = 250;
const int NB = N / B + 5;

ll pw(ll a , ll b, ll M)  { return (!b ? 1 : (b & 1 ? (a * pw(a * a % M, b / 2, M)) % M : pw(a * a % M, b / 2, M))); }

int n, q, A[N];

struct segment
{
	int fen[N + 5];
	void add(int i, int x)
	{
		for(; i < N; i += i & -i) fen[i] += x;
	}
	void build(int _n)
	{
		for(int i = 1; i <= _n; i ++)
		{
			fen[i] = i & -i;
		}
	}
	void upd(int p, int x)
	{
		int id = 0, cu = 0;
		for(int T = LOG - 1; ~T; T --)
		{
			if(id + (1 << T) <= n && (cu + fen[id + (1 << T)]) < p)
			{
				id += 1 << T;
				cu += fen[id];
			}
		}
		add(id + 1, x);
	}
	int get(int i, int ret = 0)
	{
		for(i; i; i -= i & -i)
		{
			ret += fen[i];
		}
		return ret;
	}
} S[NB];

int main()
{
	scanf("%d", &n);
	for(int i = 1; i <= n; i ++)
	{
		scanf("%d", &A[i]);
	}
	for(int T = 0; T <= n / B; T ++)
	{
		S[T].build(n);
		int tl = T * B, tr = min(n, tl + B - 1);
		tl = max(1, tl);
		for(int i = tl; i <= tr; i ++)
		{
			S[T].upd(i - A[i], 1);
		}
	}
	scanf("%d", &q);
	while(q --)
	{
		int tp, fir, sec;
		scanf("%d%d", &tp, &fir);
		if(tp == 1)
		{
			scanf("%d", &sec);
			int T = fir / B;
			int tl = T * B, tr = min(n, tl + B - 1);
			tl = max(1, tl);
			for(int i = tr; i >= fir; i --)
			{
				S[T].upd(i - A[i], -1);
			}
			A[fir] = sec;
			for(int i = fir; i <= tr; i ++)
			{
				S[T].upd(i - A[i], 1);
			}
		}
		else
		{
			int Ans = fir - A[fir];
			fir ++;
			int T = fir / B, tl = T * B, tr = min(n, tl + B - 1);
			for(int i = fir; i <= tr; i ++)
			{
				if(Ans >= i - A[i]) Ans ++;
			}
			///printf("Ans = %d\n", Ans);
			for(int T1 = T + 1; T1 <= n / B; T1 ++)
			{
				Ans = S[T1].get(Ans);
			}
			printf("%d\n", Ans);
		}
	}
    return 0;
}

/** test corner cases(n = 1?) watch for overflow or minus indices **/

