//https://w...content-available-to-author-only...f.com/problems/FLIPCOIN
#include <bits/stdc++.h>
#define FOR(i,a,n) for(lli i=a;i<n;i++)
#define sc(a) scanf("%lld",&a)
#define sc_(a,b) scanf("%lld%lld",&a,&b)
#define pf(x) printf("%lld\n",x)
#define lli long long int
using namespace std;
lli arr[1000004];
lli seg[1000004];
lli lazy[1000004];
lli create(lli s,lli e,lli i)
{
if(s>e)
return 0;
if(s==e)
{
seg[i]=arr[s];
return 0;
}
lli mid=(s+e)/2;
create(s,mid,2*i+1);create(mid+1,e,2*i+2);
seg[i]=seg[2*i+1]+seg[2*i+2];
}
lli query(lli s,lli e,lli qs,lli qe,lli si)
{
if(lazy[si]!=0)
{
seg[si]=(e-s+1)-seg[si];
if(s!=e)
{
lazy[2*si+1]=lazy[si];
lazy[2*si+2]=lazy[si];
}
lazy[si]=0;
}
if(s>qe || qs>e || s>e)
return 0;
if(s>=qs && e<=qe)
return seg[si];
lli mid=(s+e)/2;
return query(s,mid,qs,qe,2*si+1)+query(mid+1,e,qs,qe,2*si+2);
}
lli update(lli s,lli e,lli qs ,lli qe,lli si)
{
if(lazy[si]!=0)
{
seg[si]=(e-s+1)-seg[si];
if(s!=e)
{
lazy[2*si+1]=lazy[si];
lazy[2*si+2]=lazy[si];
}
lazy[si]=0;
}
if(s>e || s>qe || qs>e)
return 0;
if(s>=qs && e<=qe)
{
seg[si]=(e-s+1)-seg[si];
if(s!=e)
{
lazy[si*2+1]=1;
lazy[si*2+2]=1;
}
return 0;
}
lli mid=(e+s)/2;
update(s,mid,qs,qe,2*si+1);
update(mid+1,e,qs,qe,2*si+2);
seg[si]=seg[2*si+1]+seg[2*si+2];
}
int main()
{
lli n,q;
sc_(n,q);
FOR(i,0,n)
{
arr[i]=1;
lazy[i]=0;
}
FOR(i,0,10*n)
{
lazy[i]=0;
}
create(0,n-1,0);
FOR(i,0,q)
{
lli flag,a,b;
sc(flag);sc_(a,b);
if(flag==0)
{
update(0,n-1,a,b,0);
}
else if(flag==1)
{
lli x=query(0,n-1,a,b,0);
printf("%lld\n",b-a-x+1 );
}
}
return 0;
}
Ly9odHRwczovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmYuY29tL3Byb2JsZW1zL0ZMSVBDT0lOCgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBGT1IoaSxhLG4pIGZvcihsbGkgaT1hO2k8bjtpKyspCiNkZWZpbmUgc2MoYSkgc2NhbmYoIiVsbGQiLCZhKQojZGVmaW5lIHNjXyhhLGIpIHNjYW5mKCIlbGxkJWxsZCIsJmEsJmIpCiNkZWZpbmUgcGYoeCkgcHJpbnRmKCIlbGxkXG4iLHgpCiNkZWZpbmUgbGxpIGxvbmcgbG9uZyBpbnQKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKbGxpIGFyclsxMDAwMDA0XTsKbGxpIHNlZ1sxMDAwMDA0XTsKbGxpIGxhenlbMTAwMDAwNF07CmxsaSBjcmVhdGUobGxpIHMsbGxpIGUsbGxpIGkpCnsKCWlmKHM+ZSkKCSAgcmV0dXJuIDA7CglpZihzPT1lKQoJewoJICBzZWdbaV09YXJyW3NdOwoJICByZXR1cm4gMDsKCX0KCWxsaSBtaWQ9KHMrZSkvMjsKCWNyZWF0ZShzLG1pZCwyKmkrMSk7Y3JlYXRlKG1pZCsxLGUsMippKzIpOwoJc2VnW2ldPXNlZ1syKmkrMV0rc2VnWzIqaSsyXTsKfQpsbGkgcXVlcnkobGxpIHMsbGxpIGUsbGxpIHFzLGxsaSBxZSxsbGkgc2kpCnsKCWlmKGxhenlbc2ldIT0wKQoJewoJCXNlZ1tzaV09KGUtcysxKS1zZWdbc2ldOwoJCWlmKHMhPWUpCgkJewoJCQlsYXp5WzIqc2krMV09bGF6eVtzaV07CgkJCWxhenlbMipzaSsyXT1sYXp5W3NpXTsKCQl9CgkJbGF6eVtzaV09MDsKCX0KCWlmKHM+cWUgfHwgcXM+ZSB8fCBzPmUpCgkgICByZXR1cm4gMDsKCWlmKHM+PXFzICYmIGU8PXFlKSAKICAgICAgIHJldHVybiBzZWdbc2ldOwogICAgbGxpIG1pZD0ocytlKS8yOwogICAgcmV0dXJuIHF1ZXJ5KHMsbWlkLHFzLHFlLDIqc2krMSkrcXVlcnkobWlkKzEsZSxxcyxxZSwyKnNpKzIpOwp9CmxsaSB1cGRhdGUobGxpIHMsbGxpIGUsbGxpIHFzICxsbGkgcWUsbGxpIHNpKQp7CglpZihsYXp5W3NpXSE9MCkKCXsKCQlzZWdbc2ldPShlLXMrMSktc2VnW3NpXTsKCQlpZihzIT1lKQoJCXsKCQkJIGxhenlbMipzaSsxXT1sYXp5W3NpXTsKCQkJIGxhenlbMipzaSsyXT1sYXp5W3NpXTsKCQl9CgkJbGF6eVtzaV09MDsKCX0KCWlmKHM+ZSB8fCBzPnFlIHx8IHFzPmUpCgkgcmV0dXJuIDA7CglpZihzPj1xcyAmJiBlPD1xZSkKCXsKCQlzZWdbc2ldPShlLXMrMSktc2VnW3NpXTsKICAgICAgICBpZihzIT1lKQogICAgICAgIHsKICAgICAgICAJbGF6eVtzaSoyKzFdPTE7CiAgICAgICAgCWxhenlbc2kqMisyXT0xOwogICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKCX0KCWxsaSBtaWQ9KGUrcykvMjsKCXVwZGF0ZShzLG1pZCxxcyxxZSwyKnNpKzEpOwoJdXBkYXRlKG1pZCsxLGUscXMscWUsMipzaSsyKTsKCXNlZ1tzaV09c2VnWzIqc2krMV0rc2VnWzIqc2krMl07Cn0KCgoKaW50IG1haW4oKQp7CglsbGkgbixxOwoJc2NfKG4scSk7CglGT1IoaSwwLG4pCgl7CgkgIGFycltpXT0xOwoJICBsYXp5W2ldPTA7Cgl9CglGT1IoaSwwLDEwKm4pCgl7CgkJbGF6eVtpXT0wOwoKCX0KCWNyZWF0ZSgwLG4tMSwwKTsKCUZPUihpLDAscSkKCXsKCSAgbGxpIGZsYWcsYSxiOwoJICBzYyhmbGFnKTtzY18oYSxiKTsKCSAgaWYoZmxhZz09MCkKCSAgewoJICAJdXBkYXRlKDAsbi0xLGEsYiwwKTsKCSAgfQoJICBlbHNlIGlmKGZsYWc9PTEpCgkgIHsKCSAgCWxsaSB4PXF1ZXJ5KDAsbi0xLGEsYiwwKTsKCSAgCXByaW50ZigiJWxsZFxuIixiLWEteCsxICk7CgkgIH0KCX0KCXJldHVybiAwOwp9CgoK