// Skyqwq #include #include #define pb push_back #define fi first #define se second #define mp make_pair using namespace std; typedef long long LL; template void chkMax(T &x, T y) { if (y > x) x = y; } template void chkMin(T &x, T y) { if (y < x) x = y; } template void inline read(T &x) { int f = 1; x = 0; char s = getchar(); while (s < '0' || s > '9') { if (s == '-') f = -1; s = getchar(); } while (s <= '9' && s >= '0') x = x * 10 + (s ^ 48), s = getchar(); x *= f; } const int N = 5e6 + 5; int n, f[N], sz[N], a[N]; int find(int x) { return x == f[x] ? x : f[x] = find(f[x]); } void inline merge(int x, int y) { x = find(x), y = find(y); if (x == y) return; if (sz[x] > sz[y]) swap(x, y); f[x] = y, sz[y] += sz[x]; } int main() { read(n); for (int i = 0; i <= n; i++) f[i] = i, sz[i] = 1; a[0] = 1; while (n--) { int op, x; read(op), read(x); if (op == 1) { if (a[x]) continue; a[x] = 1; if (a[x - 1]) merge(x - 1, x); if (a[x + 1]) merge(x + 1, x); } else { int t = sz[find(0)]; if (x < t) printf("%d\n", t); else if (x == t) { if (a[x + 1]) { printf("%d\n", t + 1 + sz[find(x + 1)]); } else printf("%d\n", t + 1); } else { printf("%d\n", t); } } } return 0; }