1 #include <iostream>
2 #include <cstdio>
3 #define N 100010
4 using namespace std;
5 struct Tree
6 {
7 int size,rev,l,r;
8 }seg[N*4];
9 int n,m;
10 inline int read()
11 {
12 char c;
13 int ans=0,f=1;
14 while (!isdigit(c=getchar())) if (c==‘-‘) f=-1;
15 ans=c-‘0‘;
16 while (isdigit(c=getchar())) ans=ans*10+c-‘0‘;
17 return ans*f;
18 }
19 inline void Push_down(int x)
20 {
21 // void Push_up();
22 //if ((x>>1)+1>n*4) return;
23 if (seg[x].rev)
24 {
25 seg[(x<<1)].rev^=1;
26 seg[(x<<1)+1].rev^=1;
27 //swap(seg[(x<<1)].open,seg[(x<<1)].close);
28 //swap(seg[(x<<1)+1].open,seg[(x<<1)+1].close);
29 seg[(x<<1)].size=seg[(x<<1)].r-seg[(x<<1)].l+1-seg[(x<<1)].size;
30 seg[(x<<1)+1].size=seg[(x<<1)+1].r-seg[(x<<1)+1].l+1-seg[(x<<1)+1].size;
31 seg[x].rev=0;
32 // Push_up(x);
33 }
34 }
35 void BuildTree(int now,int l,int r)
36 {
37 seg[now].l=l,seg[now].r=r;
38 if (l==r)
39 {
40 seg[now].size=0;
41 seg[now].rev=0;
42 return;
43 }
44 int mid=(l+r)>>1;
45 BuildTree((now<<1),l,mid);
46 BuildTree((now<<1)+1,mid+1,r);
47 //seg[now].size=seg[(now<<1)+1].size+seg[(now<<1)+1].size;
48 }
49 void Reverse(int now,int l,int r,int begin,int end)
50 {
51 if (l>=begin && r<=end)
52 {
53 seg[now].rev^=1;
54 seg[now].size=seg[now].r-seg[now].l+1-seg[now].size;
55 //swap(seg[now].close,seg[now].open);
56 //Push_down(now);
57 return;
58 }
59 Push_down(now);
60 int mid=(l+r)>>1;
61 if (begin<=mid) Reverse((now<<1),l,mid,begin,end);
62 if (end>mid) Reverse((now<<1)+1,mid+1,r,begin,end);
63 seg[now].size=seg[(now<<1)].size+seg[(now<<1)+1].size;
64 //Push_up(now);
65 }
66 int Query(int now,int l,int r,int begin,int end)
67 {
68 if (l>=begin && r<=end) return seg[now].size;
69 int mid=(l+r)>>1,ans=0;
70 Push_down(now);
71 if (begin<=mid) ans+=Query((now<<1),l,mid,begin,end);
72 if (end>mid) ans+=Query((now<<1)+1,mid+1,r,begin,end);
73 return ans;
74 }
75 int main()
76 {
77 int x,y,z;
78 //scanf("%d%d",&n,&m);
79 n=read(); m=read();
80 BuildTree(1,1,n);
81 for (int i=1;i<=m;i++)
82 {
83 x=read(); y=read(); z=read();
84 if (x) printf("%d\n",Query(1,1,n,y,z));
85 else Reverse(1,1,n,y,z);
86 }
87 return 0;
88 }