#include <bits/stdc++.h>
#include <string>
#include <vector>
using namespace std;
// 维护差分数组的前缀异或:单点修改、前缀查询都是 O(log n)
struct BIT {
int n;
vector<int> t;
BIT(int n) : n(n), t(n + 1, 0) {}
void add(int i, int v) {
for (; i <= n; i += i & -i) t[i] ^= v;
}
int query(int i) {
int r = 0;
for (; i > 0; i -= i & -i) r ^= t[i];
return r;
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
string s;
cin >> s;
// 差分数组:翻转 [L,R] 等价于 d[L] 与 d[R+1] 各异或一次
BIT bit(n);
for (int i = 1; i <= n; ++i) {
int cur = s[i - 1] - '0';
int prev = i > 1 ? s[i - 2] - '0' : 0;
if (cur ^ prev) bit.add(i, 1);
}
for (int i = 0; i < m; ++i) {
int op;
cin >> op;
if (op == 1) {
int l, r;
cin >> l >> r;
bit.add(l, 1);
if (r + 1 <= n) bit.add(r + 1, 1);
} else {
int x;
cin >> x;
cout << bit.query(x) << "\n";
}
}
return 0;
}