#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define ULL unsigned long long
LL tree[1000000+10],lazy[100000+10];
void build(LL node,LL start,LL end)
{
if(start==end)
{ tree[node] = 1;
return ;
}
LL mid = (start + end)/2;
build(2*node,start,mid);
build(2*node+1,mid+1,end);
tree[node] = tree[2*node] + tree[2*node+1];
}
void update(LL node,LL start,LL end,LL l,LL r)
{
if(lazy[node]!=0)
{ if(lazy[node]%2)
{ tree[node] = end-start+1 - tree[node] ;
if(start!=end)
{ lazy[node*2] = lazy[2*node] + lazy[node];
lazy[2*node+1] = lazy[2*node+1] + lazy[node];
}
lazy[node] = 0;
}
}
if(start>end or end<l or start>r)
return ;
if(l<=start and end<=r)
{
tree[node] = end-start+1 - tree[node] ;
if(start!=end)
{ lazy[2*node+1] = lazy[2*node+1] + 1;
lazy[2*node] = lazy[2*node] + 1;
}
return ;
}
LL mid = (start + end)/2;
update(2*node,start,mid,l,r);
update(2*node+1,mid+1,end,l,r);
tree[node] = tree[2*node] + tree[2*node+1] ;
}
LL query(LL node,LL start,LL end,LL l,LL r)
{ if(start>end or start>r or end<l)
return 0;
if(lazy[node]!=0)
{ if(lazy[node]%2)
{ tree[node] = end-start+1 - tree[node] ;
if(start!=end)
{ lazy[2*node] = lazy[2*node] + lazy[node] ;
lazy[2*node+1]= lazy[node] + lazy[2*node+1];
}
lazy[node] = 0;
}
}
if(start>=l and end<=r)
return tree[node] ;
LL mid = (start + end)/2;
LL p1 = query(2*node,start,mid,l,r);
LL p2 = query(2*node+1,mid+1,end,l,r) ;
return (p1 + p2) ;
}
int main()
{ ios_base::sync_with_stdio(false);
cin.tie(NULL);
LL n,q,d,l,r;
scanf("%lld%lld",&n,&q);
build(1,1,n) ;
while(q--)
{
scanf("%lld%lld%lld",&d,&l,&r);
if(d==0)
{ update(1,1,n,l,r);
/*for(LL i=1;i<=15;i++)
cout<<tree[i]<<" ";
cout<<endl;
for(LL i=1;i<=15;i++)
cout<<lazy[i]<<" " ;
cout<<endl;*/
}
else
{ LL f_ans = query(1,1,n,l,r);
printf("%lld\n",r-l+1 - f_ans) ;
}
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBMTCBsb25nIGxvbmcKI2RlZmluZSBVTEwgdW5zaWduZWQgbG9uZyBsb25nIApMTCB0cmVlWzEwMDAwMDArMTBdLGxhenlbMTAwMDAwKzEwXTsKdm9pZCBidWlsZChMTCBub2RlLExMIHN0YXJ0LExMIGVuZCkKewogICAgaWYoc3RhcnQ9PWVuZCkKICAgIHsgIHRyZWVbbm9kZV0gPSAxOwogICAgICAgcmV0dXJuIDsKICAgIH0KICAgIExMIG1pZCA9IChzdGFydCArIGVuZCkvMjsKICAgIGJ1aWxkKDIqbm9kZSxzdGFydCxtaWQpOwogICAgYnVpbGQoMipub2RlKzEsbWlkKzEsZW5kKTsKICAgIHRyZWVbbm9kZV0gPSB0cmVlWzIqbm9kZV0gKyB0cmVlWzIqbm9kZSsxXTsKfQp2b2lkIHVwZGF0ZShMTCBub2RlLExMIHN0YXJ0LExMIGVuZCxMTCBsLExMIHIpCnsgICAKICAgIGlmKGxhenlbbm9kZV0hPTApCiAgICB7ICAgaWYobGF6eVtub2RlXSUyKQogICAgICAgIHsgIHRyZWVbbm9kZV0gPSBlbmQtc3RhcnQrMSAtIHRyZWVbbm9kZV0gOwogICAgICAgICAgIGlmKHN0YXJ0IT1lbmQpCiAgICAgICAgICAgeyAgIGxhenlbbm9kZSoyXSA9IGxhenlbMipub2RlXSArIGxhenlbbm9kZV07IAogICAgICAgICAgICAgICBsYXp5WzIqbm9kZSsxXSA9IGxhenlbMipub2RlKzFdICsgbGF6eVtub2RlXTsKICAgICAgICAgICB9IAogICAgICAgICAgIGxhenlbbm9kZV0gPSAwOwogICAgICAgIH0KICAgIH0KICAgIGlmKHN0YXJ0PmVuZCBvciBlbmQ8bCBvciBzdGFydD5yKQogICAgICByZXR1cm4gOwogICAgaWYobDw9c3RhcnQgYW5kIGVuZDw9cikKICAgIHsgICAKICAgICAgICB0cmVlW25vZGVdID0gZW5kLXN0YXJ0KzEgLSB0cmVlW25vZGVdIDsKICAgICAgICBpZihzdGFydCE9ZW5kKQogICAgICAgIHsgIGxhenlbMipub2RlKzFdID0gbGF6eVsyKm5vZGUrMV0gKyAxOwogICAgICAgICAgIGxhenlbMipub2RlXSA9IGxhenlbMipub2RlXSArIDE7CiAgICAgICAgfQogICAgICAgIHJldHVybiA7CiAgICB9CiAgICBMTCBtaWQgPSAoc3RhcnQgKyBlbmQpLzI7CiAgICB1cGRhdGUoMipub2RlLHN0YXJ0LG1pZCxsLHIpOwogICAgdXBkYXRlKDIqbm9kZSsxLG1pZCsxLGVuZCxsLHIpOwogICAgdHJlZVtub2RlXSA9IHRyZWVbMipub2RlXSArIHRyZWVbMipub2RlKzFdIDsKfQpMTCBxdWVyeShMTCBub2RlLExMIHN0YXJ0LExMIGVuZCxMTCBsLExMIHIpCnsgICBpZihzdGFydD5lbmQgb3Igc3RhcnQ+ciBvciBlbmQ8bCkKICAgICByZXR1cm4gMDsKICAgIGlmKGxhenlbbm9kZV0hPTApCiAgICB7ICBpZihsYXp5W25vZGVdJTIpCiAgICAgICAgeyAgdHJlZVtub2RlXSA9IGVuZC1zdGFydCsxIC0gdHJlZVtub2RlXSA7CiAgICAgICAgICAgaWYoc3RhcnQhPWVuZCkKICAgICAgICAgICB7ICBsYXp5WzIqbm9kZV0gPSBsYXp5WzIqbm9kZV0gKyBsYXp5W25vZGVdIDsKICAgICAgICAgICAgICBsYXp5WzIqbm9kZSsxXT0gbGF6eVtub2RlXSArIGxhenlbMipub2RlKzFdOwogICAgICAgICAgIH0KICAgICAgICAgICBsYXp5W25vZGVdID0gMDsKICAgICAgICB9CiAgICB9CiAgICBpZihzdGFydD49bCBhbmQgZW5kPD1yKQogICAgICByZXR1cm4gdHJlZVtub2RlXSA7CiAgICBMTCBtaWQgPSAoc3RhcnQgKyBlbmQpLzI7CiAgICBMTCBwMSA9IHF1ZXJ5KDIqbm9kZSxzdGFydCxtaWQsbCxyKTsKICAgIExMIHAyID0gcXVlcnkoMipub2RlKzEsbWlkKzEsZW5kLGwscikgOwogICAgcmV0dXJuIChwMSArIHAyKSA7Cn0KaW50IG1haW4oKQp7ICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogICAgTEwgbixxLGQsbCxyOwogICAgc2NhbmYoIiVsbGQlbGxkIiwmbiwmcSk7CiAgICBidWlsZCgxLDEsbikgOwogICAgd2hpbGUocS0tKQogICAgewogICAgICAgIHNjYW5mKCIlbGxkJWxsZCVsbGQiLCZkLCZsLCZyKTsKICAgICAgICBpZihkPT0wKQogICAgICAgIHsgIHVwZGF0ZSgxLDEsbixsLHIpOwogICAgICAgICAgIC8qZm9yKExMIGk9MTtpPD0xNTtpKyspCiAgICAgICAgICAgICBjb3V0PDx0cmVlW2ldPDwiICI7CiAgICAgICAgICAgIGNvdXQ8PGVuZGw7CiAgICAgICAgICAgZm9yKExMIGk9MTtpPD0xNTtpKyspCiAgICAgICAgICAgICBjb3V0PDxsYXp5W2ldPDwiICIgOwogICAgICAgICAgICAgY291dDw8ZW5kbDsqLwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgeyBMTCBmX2FucyA9IHF1ZXJ5KDEsMSxuLGwscik7CiAgICAgICAgICBwcmludGYoIiVsbGRcbiIsci1sKzEgLSBmX2FucykgOwogICAgICAgIH0KICAgICAgICAKICAgIH0KfQ==