#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;
}