#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, m, a[100005], pos[100005], tag[505], sum[505], L[505], R[505];
void pre ()
{
int k = sqrt (n);
for (int i = 1; i <= k; ++ i)L[i] = n / k * (i - 1) + 1, R[i] = n / k * i;
R[k] = n;
for (int i = 1; i <= k; ++ i)for (int j = L[i]; j <= R[i]; ++ j)pos[j] = i;
}
void update (int x, int y)
{
int l = pos[x], r = pos[y];
if (l == r)for (int i = x; i <= y; ++ i)
{
++ a[i];
if (a[i] % 2 == 0)-- sum[l];
else ++ sum[l];
}
else
{
for (int i = x; i <= R[l]; ++ i)
{
++ a[i];
if (a[i] % 2 == 0)-- sum[l];
else ++ sum[l];
}
for (int i = L[r]; i <= y; ++ i)
{
++ a[i];
if (a[i] % 2 == 0)-- sum[r];
else ++ sum[r];
}
for (int i = l + 1; i < r; ++ i)++ tag[i];
}
}
void query (int x, int y)
{
int l = pos[x], r = pos[y], ans = 0;
if (l == r)for (int i = x; i <= y; ++ i)if (tag[l] + a[i] % 2)++ ans;
else
{
for (int i = x; i <= R[l]; ++ i)if (tag[l] + a[i] % 2)++ ans;
for (int i = L[r]; i <= y; ++ i)if (tag[r] + a[i] % 2)++ ans;
for (int i = l + 1; i < r; ++ i)
{
if (tag[i] % 2)ans += (R[i] - L[i] + 1 - sum[i]);
else ans += sum[i];
}
}
cout << ans << '\n';
}
signed main ()
{
ios::sync_with_stdio (0), cin.tie (0), cout.tie (0);
cin >> n >> m;
while (m --)
{
int op, l, r;
cin >> op >> l >> r;
if (op == 0)update (l, r);
else query (l, r);
}
return 0;
}