#include <bits/stdc++.h>
using namespace std;
#define MAXN 100005
bool light[MAXN];
int belong[MAXN], block[MAXN], l[MAXN], r[MAXN];
bool lazy[MAXN];
int n, m;
void init() {
int siz = sqrt(n);
if (n % siz != 0) {
siz++;
}
int n1 = n, now = 0;
for (int i = 1; n1; i++) {
if (n1 >= siz) {
l[i] = now + 1;
r[i] = now + siz;
now += siz;
n1 -= siz;
}
else {
l[i] = now + 1;
r[i] = n;
n1 = 0;
}
for (int j = l[i]; j <= r[i]; j++) {
belong[j] = i;
}
}
}
int main() {
scanf("%d%d", &n, &m);
init();
for (int i = 1; i <= m; i++) {
int op, x, y;
scanf("%d%d%d", &op, &x, &y);
if (!op) {
if (belong[x] == belong[y]) {
for (int j = x; j <= y; j++) {
block[belong[x]] = block[belong[x]] - light[j] + (!light[j]);
light[j] = !light[j];
}
continue;
}
for (int j = x; j <= r[belong[x]]; j++) {
block[belong[x]] = block[belong[x]] - light[j] + (!light[j]);
light[j] = !light[j];
}
for (int j = belong[x] + 1; j < belong[y]; j++) {
lazy[j] = !lazy[j];
}
for (int j = l[belong[y]]; j <= y; j++) {
block[belong[y]] = block[belong[y]] - light[j] + (!light[j]);
light[j] = !light[j];
}
}
else {
int cnt = 0;
for (int j = x; j <= r[belong[x]]; j++) {
cnt += (lazy[belong[x]]) ? (!light[j]) : (light[j]);
}
for (int j = belong[x] + 1; j < belong[y]; j++) {
cnt += (lazy[j]) ? (r[j] - l[j] + 1 - block[j]) : (block[j]);
}
for (int j = l[belong[y]]; j <= y; j++) {
cnt += (lazy[belong[y]]) ? (!light[j]) : (light[j]);
}
printf("%d\n", cnt);
}
}
return 0;
}