#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
int a[100010],f[400010],tag[400010];
bool inrange(int l,int r,int l2,int r2) {
return l <= l2 && r >= r2;
}
bool outofrange(int l,int r,int l2,int r2) {
return l > r2 || r < l2;
}
void maketag(int u,int len,int val) {
f[u] = len - f[u];
tag[u] ^= val;
}
void pushdown(int u,int l,int r) {
int mid = (l + r) >> 1;
maketag(u + u,mid - l + 1,tag[u]);
maketag(u + u + 1,r - mid,tag[u]);
tag[u] = 0;
}
void modify(int u,int l,int r,int L,int R,int val) {
if (inrange(L,R,l,r)) maketag(u,r - l + 1,val);
else if (!outofrange(l,r,L,R)) {
pushdown(u,l,r);
int mid = (l + r) >> 1;
modify(u + u,l,mid,L,R,val);
modify(u + u + 1,mid + 1,r,L,R,val);
f[u] = f[u + u] + f[u + u + 1];
}
}
int query(int u,int l,int r,int L,int R) {
if (inrange(L,R,l,r)) return f[u];
else if (!outofrange(l,r,L,R)) {
pushdown(u,l,r);
int mid = (l + r) >> 1;
return query(u + u,l,mid,L,R) + query(u + u + 1,mid + 1,r,L,R);
} else return 0;
}
signed main(){
cin >> n >> m;
while (m --) {
int op,x,y;
cin >> op >> x >> y;
if (op == 0) {
modify(1,1,n,x,y,1);
} else {
cout << query(1,1,n,x,y) << endl;
}
}
return 0;
}