#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 3e5+5;
int n, q, f[N];
string S;
int bit[N];
void update(int p, int v) {
for (; p <= n; p += p & -p) bit[p] += v;
}
int get(int p) {
int sum = 0;
for (; p > 0; p -= p & -p) sum += bit[p];
return sum;
}
void build(int i) {
if (i < 1 || i > n) return;
int cnt = 0;
if (i - 1 >= 1 && S[i - 1] == S[i]) cnt++;
if (i - 2 >= 1 && S[i - 2] == S[i]) cnt++;
update(i, cnt - f[i]);
f[i] = cnt;
}
void solve() {
cin >> n >> q >> S;
S = " " + S;
for (int i = 1; i <= n; i++) build(i);
while (q--) {
int type, l, r; cin >> type >> l >> r;
if (type == 1) {
if (S[l] == S[r]) continue;
swap(S[l], S[r]);
for (int i = l; i <= l + 2; i++) build(i);
for (int i = r; i <= r + 2; i++) build(i);
} else {
if (l == r) {
cout << "1\n";
continue;
}
int sum = get(r) - get(l);
if (l - 1 >= 1 && l + 1 <= r && S[l - 1] == S[l + 1]) sum--;
cout << (sum == 0 ? "1\n" : "0\n");
}
}
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
#define TASK "APALIN"
if (fopen(TASK".INP", "r")) {
freopen(TASK".INP", "r", stdin);
freopen(TASK".OUT", "w", stdout);
}
int tests = 1; // cin >> tests;
while (tests--) solve();
#ifdef LOCAL
cerr << "\nTime elapsed: " << clock() << " ms.\n";
#endif
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyBsbCA9IGxvbmcgbG9uZzsKCmNvbnN0IGludCBOID0gM2U1KzU7CgppbnQgbiwgcSwgZltOXTsKc3RyaW5nIFM7CgppbnQgYml0W05dOwoKdm9pZCB1cGRhdGUoaW50IHAsIGludCB2KSB7CiAgICBmb3IgKDsgcCA8PSBuOyBwICs9IHAgJiAtcCkgYml0W3BdICs9IHY7Cn0KCmludCBnZXQoaW50IHApIHsKICAgIGludCBzdW0gPSAwOwogICAgZm9yICg7IHAgPiAwOyBwIC09IHAgJiAtcCkgc3VtICs9IGJpdFtwXTsKICAgIHJldHVybiBzdW07Cn0KCnZvaWQgYnVpbGQoaW50IGkpIHsKICAgIGlmIChpIDwgMSB8fCBpID4gbikgcmV0dXJuOwogICAgaW50IGNudCA9IDA7CiAgICBpZiAoaSAtIDEgPj0gMSAmJiBTW2kgLSAxXSA9PSBTW2ldKSBjbnQrKzsKICAgIGlmIChpIC0gMiA+PSAxICYmIFNbaSAtIDJdID09IFNbaV0pIGNudCsrOwogICAgdXBkYXRlKGksIGNudCAtIGZbaV0pOwogICAgZltpXSA9IGNudDsKfQoKdm9pZCBzb2x2ZSgpIHsKICAgIGNpbiA+PiBuID4+IHEgPj4gUzsKICAgIFMgPSAiICIgKyBTOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBidWlsZChpKTsKICAgIHdoaWxlIChxLS0pIHsKICAgICAgICBpbnQgdHlwZSwgbCwgcjsgY2luID4+IHR5cGUgPj4gbCA+PiByOwogICAgICAgIGlmICh0eXBlID09IDEpIHsKICAgICAgICAgICAgaWYgKFNbbF0gPT0gU1tyXSkgY29udGludWU7CiAgICAgICAgICAgIHN3YXAoU1tsXSwgU1tyXSk7CiAgICAgICAgICAgIGZvciAoaW50IGkgPSBsOyBpIDw9IGwgKyAyOyBpKyspIGJ1aWxkKGkpOwogICAgICAgICAgICBmb3IgKGludCBpID0gcjsgaSA8PSByICsgMjsgaSsrKSBidWlsZChpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAobCA9PSByKSB7CiAgICAgICAgICAgICAgICBjb3V0IDw8ICIxXG4iOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW50IHN1bSA9IGdldChyKSAtIGdldChsKTsKICAgICAgICAgICAgaWYgKGwgLSAxID49IDEgJiYgbCArIDEgPD0gciAmJiBTW2wgLSAxXSA9PSBTW2wgKyAxXSkgc3VtLS07CiAgICAgICAgICAgIGNvdXQgPDwgKHN1bSA9PSAwID8gIjFcbiIgOiAiMFxuIik7CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7CgogICAgI2RlZmluZSBUQVNLICJBUEFMSU4iCiAgICBpZiAoZm9wZW4oVEFTSyIuSU5QIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4oVEFTSyIuSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihUQVNLIi5PVVQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgaW50IHRlc3RzID0gMTsgLy8gY2luID4+IHRlc3RzOwogICAgd2hpbGUgKHRlc3RzLS0pIHNvbHZlKCk7CgogICAgI2lmZGVmIExPQ0FMCiAgICBjZXJyIDw8ICJcblRpbWUgZWxhcHNlZDogIiA8PCBjbG9jaygpIDw8ICIgbXMuXG4iOwogICAgI2VuZGlmCiAgICByZXR1cm4gMDsKfQ==