#include <stdio.h>
int N, Q, c, lp, rp, seg[262144][2];
void query1(int a, int b, int k, int l, int r) {
if (r <= a || b <= l) return;
if (a <= l && r <= b) {
int p = k, d = r - l; seg[k][0] = (r - l) - seg[k][0], seg[k][1]++;
while (p > 1) {
p >>= 1; d <<= 1;
seg[p][0] = seg[2 * p][0] + seg[2 * p + 1][0];
if (seg[p][1] % 2 == 1) seg[p][0] = d - seg[p][0];
}
}
else {
query1(a, b, 2 * k, l, (l + r) / 2);
query1(a, b, 2 * k + 1, (l + r) / 2, r);
}
}
int query2(int a, int b, int k, int l, int r) {
if (r <= a || b <= l) return 0;
if (a <= l && r <= b) {
int ret = seg[k][0], p = k;
while (p > 1) {
p >>= 1;
if (seg[p][1] % 2 == 1) ret = (r - l) - ret;
}
return ret;
}
int lc = query2(a, b, 2 * k, l, (l + r) / 2);
int rc = query2(a, b, 2 * k + 1, (l + r) / 2, r);
return lc + rc;
}
int main() {
scanf("%d%d", &N, &Q);
for (int i = 0; i < Q; i++) {
scanf("%d%d%d", &c, &lp, &rp);
if (c == 1) query1(lp, rp, 1, 0, 131072);
else printf("%d\n", query2(lp, rp, 1, 0, 131072));
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CmludCBOLCBRLCBjLCBscCwgcnAsIHNlZ1syNjIxNDRdWzJdOwp2b2lkIHF1ZXJ5MShpbnQgYSwgaW50IGIsIGludCBrLCBpbnQgbCwgaW50IHIpIHsKCWlmIChyIDw9IGEgfHwgYiA8PSBsKSByZXR1cm47CglpZiAoYSA8PSBsICYmIHIgPD0gYikgewoJCWludCBwID0gaywgZCA9IHIgLSBsOyBzZWdba11bMF0gPSAociAtIGwpIC0gc2VnW2tdWzBdLCBzZWdba11bMV0rKzsKCQl3aGlsZSAocCA+IDEpIHsKCQkJcCA+Pj0gMTsgZCA8PD0gMTsKCQkJc2VnW3BdWzBdID0gc2VnWzIgKiBwXVswXSArIHNlZ1syICogcCArIDFdWzBdOwoJCQlpZiAoc2VnW3BdWzFdICUgMiA9PSAxKSBzZWdbcF1bMF0gPSBkIC0gc2VnW3BdWzBdOwoJCX0KCX0KCWVsc2UgewoJCXF1ZXJ5MShhLCBiLCAyICogaywgbCwgKGwgKyByKSAvIDIpOwoJCXF1ZXJ5MShhLCBiLCAyICogayArIDEsIChsICsgcikgLyAyLCByKTsKCX0KfQppbnQgcXVlcnkyKGludCBhLCBpbnQgYiwgaW50IGssIGludCBsLCBpbnQgcikgewoJaWYgKHIgPD0gYSB8fCBiIDw9IGwpIHJldHVybiAwOwoJaWYgKGEgPD0gbCAmJiByIDw9IGIpIHsKCQlpbnQgcmV0ID0gc2VnW2tdWzBdLCBwID0gazsKCQl3aGlsZSAocCA+IDEpIHsKCQkJcCA+Pj0gMTsKCQkJaWYgKHNlZ1twXVsxXSAlIDIgPT0gMSkgcmV0ID0gKHIgLSBsKSAtIHJldDsKCQl9CgkJcmV0dXJuIHJldDsKCX0KCWludCBsYyA9IHF1ZXJ5MihhLCBiLCAyICogaywgbCwgKGwgKyByKSAvIDIpOwoJaW50IHJjID0gcXVlcnkyKGEsIGIsIDIgKiBrICsgMSwgKGwgKyByKSAvIDIsIHIpOwoJcmV0dXJuIGxjICsgcmM7Cn0KaW50IG1haW4oKSB7CglzY2FuZigiJWQlZCIsICZOLCAmUSk7Cglmb3IgKGludCBpID0gMDsgaSA8IFE7IGkrKykgewoJCXNjYW5mKCIlZCVkJWQiLCAmYywgJmxwLCAmcnApOwoJCWlmIChjID09IDEpIHF1ZXJ5MShscCwgcnAsIDEsIDAsIDEzMTA3Mik7CgkJZWxzZSBwcmludGYoIiVkXG4iLCBxdWVyeTIobHAsIHJwLCAxLCAwLCAxMzEwNzIpKTsKCX0KCXJldHVybiAwOwp9