#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
int n, m, a[N], bl[N], L[N], R[N], blk, s, lt[N], num[N];
int f(int x) {
if (x == 0) return 1;
return 0;
}
void init() {
blk = sqrt(n);
s = n/blk;
for (int i = 1; i <= s; i++) {
L[i] = (i - 1) * blk + 1;
R[i] = i * blk;
}
if (R[s] < n) {
s++;
L[s] = R[s - 1] + 1;
R[s] = n;
}
for (int i = 1; i <= s; i++) {
for (int j = L[i]; j <= R[i]; j++) {
bl[j] = i;
}
}
}
void update(int l, int r) {
if (bl[l] == bl[r]) {
for (int i = l; i <= r; i++) {
num[bl[l]] -= a[i];
a[i] = f(a[i]);
num[bl[r]] += a[i];
}
} else {
for (int i = l; i <= R[bl[l]]; i++) {
num[bl[l]] -= a[i];
a[i] = f(a[i]);
num[bl[l]] += a[i];
}
for (int i = bl[l] + 1; i <= bl[r] - 1; i++) {
lt[i]++;
num[i] = R[i] - L[i] + 1 - num[i];
}
for (int i = L[bl[r]]; i <= r; i++) {
num[bl[r]] -= a[i];
a[i] = f(a[i]);
num[bl[r]] += a[i];
}
}
}
void query(int l, int r) {
int ret = 0;
if (bl[l] == bl[r]) {
for (int i = l; i <= r; i++) {
if (lt[bl[l]] % 2 == 1) ret += f(a[i]);
else ret += a[i];
}
} else {
for (int i = l; i <= R[bl[l]]; i++) {
if (lt[bl[l]] % 2 == 1) ret += f(a[i]);
else ret += a[i];
}
for (int i = bl[l] + 1; i <= bl[r] - 1; i++) {
ret += num[i];
}
for (int i = L[bl[r]]; i <= r; i++) {
if (lt[bl[r]] % 2 == 1) ret += f(a[i]);
else ret += a[i];
}
}
cout << ret << '\n';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(); cout.tie();
cin >> n >> m;
init();
for (int i = 1; i <= m; i++) {
int c, a, b;
cin >> c >> a >> b;
if (c == 0) {
update(a, b);
} else {
query(a, b);
}
}
return 0;
}