#include<bits/stdc++.h>
using namespace std;
int n,m,s[100010];
int main(){
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(0);
	cin>>n>>m;
	for(register int i=1;i<=m;i++){
		register int a,b,c,ans=0;
		cin>>a>>b>>c;
		if(!a){
			for(int i=b;i<=c;i++)
		 		s[i]^=1;
		}
		else {
			for(int i=b;i<=c;i++)
				ans+=s[i];
			cout<<ans<<"\n";
		}
	}
	return 0;
}
暴力
#include<bits/stdc++.h>
using namespace std;
const int N = 500010;
 
int n,m,c,a,b,v[N],tag[N];
void pushup(int pos){
	v[pos]=v[pos<<1]+v[pos<<1|1];
}
void pushdown(int pos,int l,int r){
	int mid=(l+r)>>1;
	
	tag[pos<<1]^=(tag[pos]&1);
	if(tag[pos]&1) v[pos<<1]=(mid-l+1-v[pos<<1]);
	
	tag[pos<<1|1]^=(tag[pos]&1);
	if(tag[pos]&1) v[pos<<1|1]=(r-mid-v[pos<<1|1]);
	
	tag[pos]=0;
}
void Xor(int pos,int l,int r,int ql,int qr){
	if(ql<=l&&qr>=r){
		v[pos]=(r-l+1-v[pos]);
		tag[pos]^=1;
		return;
	}
	pushdown(pos,l,r);
	int mid=(l+r)>>1;
	if(ql<=mid) Xor(pos<<1,l,mid,ql,qr);
	if(qr>mid) Xor(pos<<1|1,mid+1,r,ql,qr);
	pushup(pos);
}
int Sum(int pos,int l,int r,int ql,int qr){
	if(ql<=l&&qr>=r) return v[pos];
	pushdown(pos,l,r);
	int ans=0,mid=(l+r)>>1;
	if(ql<=mid) ans+=Sum(pos<<1,l,mid,ql,qr);
	if(qr>mid) ans+=Sum(pos<<1|1,mid+1,r,ql,qr);
	return ans;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>c>>a>>b;
		if(c){
			cout<<Sum(1,1,n,a,b)<<"\n";
		}
		else Xor(1,1,n,a,b);
	}
	return 0;
}
线段树