#include <bits/stdc++.h>
using namespace std;
int n, m, sq, cnt[100005], block[100005], st[100005], ed[100005];
bool flag[100005], fblock[100005];
void change(int l, int r)
{
int lb = block[l], rb = block[r];
if (lb == rb)
{
for (int i = l ; i <= r ; i ++)
{
flag[i] ^= 1;
}
return ;
}
for (int i = l ; i <= ed[lb] ; i ++)
{
flag[i] ^= 1;
if (flag[i] == 1)
{
cnt[lb] += 1;
}
else
{
cnt[lb] -= 1;
}
}
for (int i = st[rb] ; i <= r ; i ++)
{
flag[i] ^= 1;
if (flag[i] == 1)
{
cnt[rb] += 1;
}
else
{
cnt[rb] -= 1;
}
}
for (int i = lb + 1 ; i <= rb - 1 ; i ++)
{
fblock[i] ^= 1;
cnt[i] = ed[i] - st[i] + 1 - cnt[i];
}
}
int fd(int l, int r)
{
int lb = block[l], rb = block[r], ans = 0;
if (lb == rb)
{
for (int i = l ; i <= r ; i ++)
{
if ((flag[i] ^ fblock[lb]) == 1)
{
ans ++;
}
}
return ans;
}
for (int i = l ; i <= ed[lb] ; i ++)
{
if ((flag[i] ^ fblock[lb]) == 1)
{
ans ++;
}
}
for (int i = st[rb] ; i <= r ; i ++)
{
if ((flag[i] ^ fblock[rb]) == 1)
{
ans ++;
}
}
for (int i = lb + 1 ; i <= rb - 1 ; i ++)
{
ans += cnt[i];
}
return ans;
}
int main()
{
memset(fblock, 0, sizeof(fblock));
memset(flag, 0, sizeof(flag));
cin >> n >> m;
sq = sqrt(n);
for (int i = 1 ; i <= n ; i ++)
{
int s = i / sq + 1;
if (!st[s])
{
st[s] = i;
}
ed[s] = i;
block[i] = s;
}
while (m --)
{
int c, a, b;
scanf("%d%d%d", &c, &a, &b);
if (!c)
{
change(a, b);
}
else
{
printf("%d\n", fd(a, b));
}
}
}