#include <bits/stdc++.h>

using namespace std;

#define int long long
#define double long double

int inf = (int)1000 * 1000 * 1000 * 1000 * 1000 * 1000 + 100;
// int inf = (int)1000 * 1000 * 1000 + 100;

/*
#pragma optimize("O3")
#pragma optimize("avx,avx2,bmi,bmi2")
*/

mt19937_64 rnd(228);

void print(vector <int> a) {
    for (int i = 0; i < a.size(); i ++) {
        cout << a[i] << " ";
    }
    cout << '\n';
}

int mod = 998244353;

int umn(int a, int b) {
    return (a * b) % mod;
}

int umn(int a, int b, int c) {
    return umn(a, umn(b, c));
}

int umn(int a, int b, int c, int d) {
    return umn(a, umn(b, c, d));
}

int umn(int a, int b, int c, int d, int e) {
    return umn(a, umn(b, c, d, e));
}

int bin_pow(int a, int x) {
    if (x == 0) {
        return 1;
    }
    if (x % 2 == 0) {
        return bin_pow(umn(a, a), x / 2);
    }
    return umn(a, bin_pow(a, x - 1));
}

int del(int a, int b) {
    return umn(a, bin_pow(b, mod - 2));
}

int fact(int n) {
    int c = 1;
    for (int i = 1; i <= n; i ++) {
        c = umn(c, i);
    }
    return c;
}

int cnk(int n, int k) {
    return del(fact(n), umn(fact(k), fact(n - k)));
}

int norm(int x) {
    x %= mod;
    x += mod;
    x %= mod;
    return x;
}

struct st {
    vector <int> t;

    void build(int n) {
        t.resize(4 * n, 0);
    }

    int get(int v, int l, int r, int ll, int rr) {
        if (ll > rr) {
            return 0;
        }
        if (l == ll && r == rr) {
            return t[v];
        }
        int m = (l + r) / 2;
        return get(v * 2 + 1, l, m, ll, min(m, rr)) + get(v * 2 + 2, m + 1, r, max(m + 1, ll), rr);
    }

    void update(int v, int l, int r, int i, int x) {
        if (l == r) {
            t[v] = x;
            return;
        }
        int m = (l + r) / 2;
        if (i <= m) {
            update(v * 2 + 1, l, m, i, x);
        }
        else {
            update(v * 2 + 2, m + 1, r, i, x);
        }
        t[v] = t[v * 2 + 1] + t[v * 2 + 2];
    }
};

int get(int x, int y, int z, int t, int hui, int start) {
    // cout << x << " " << y << " " << z << " " << t << " " << hui << " " << start << '\n';
    if (hui != 1) {
        return get(y, x, t, z, 1, 3 - start);
    }
    y += t;
    if (start == 1) {
        if (x >= y) {
            return x + y + 1;
        }
        return x * 2 + 1;
    }
    if (x >= y) {
        return x + y + 1;
    }
    return x * 2 + 2;
}

void solve() {
    int n, q;
    cin >> n >> q;
    vector <int> a(n);
    for (int i = 0; i < n; i ++) {
        cin >> a[i];
    }

    st t1;
    t1.build(n);
    for (int i = 0; i < n; i ++) {
        if (a[i] == 1) {
            t1.update(0, 0, n - 1, i, 1);
        }
    }

    while (q --) {
        int type;
        cin >> type;
        if (type == 1) {
            int x;
            cin >> x;
            x --;
            if (a[x + 1] == 1) {
                t1.update(0, 0, n - 1, x, 1);
            }
            else {
                t1.update(0, 0, n - 1, x, 0);
            }
            if (a[x] == 1) {
                t1.update(0, 0, n - 1, x + 1, 1);
            }
            else {
                t1.update(0, 0, n - 1, x + 1, 0);
            }
            swap(a[x], a[x + 1]);
        }
        else {
            int i;
            cin >> i;
            i --;
            int x = t1.get(0, 0, n - 1, 0, i - 1);
            int y = i - x;
            int z = t1.get(0, 0, n - 1, i + 1, n - 1);
            int t = n - x - y - z - 1;

            cout << get(x, y, z, t, a[i], a[0]) << '\n';
        }
    }
}

signed main() {
#ifdef LOCAL
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#else
    ios_base::sync_with_stdio(0);
    cin.tie(0);
#endif

    int _ = 1;
    // cin >> _;
    while (_ --) {
        solve();
    }
}