#include <iostream>
#include <cstdio>
using namespace std;
static int coins[400000];
int query(int node,int a,int b,int start,int dest)
{
int res(0);
if (start>dest||start>b||dest<a)return res;
else if (start==dest)return coins[node];
else
{
int a1=query(node*2,a,b,start,max(dest/2,start));
int a2=query(node*2+1,a,b,max(dest/2,start)+1,dest);
res=a1+a2;
return res;
}
}
void flip (int node,int a,int b,int start,int dest)
{
if (start>dest||start>b||dest<a)return ;
else if (start==dest)coins[node]=(coins[node]+1)%2;
else {
flip(node*2,a,b,start,max(dest/2,start));
flip(node*2+1,a,b,max(dest/2,start)+1,dest);
coins[node]=coins[node*2]+coins[node*2+1];}
}
int main()
{
int n,q;
scanf("%d%d",&n,&q);
for (int c(0);c<q;c++)
{
int flag,a,b;
scanf("%d%d%d",&flag,&a,&b);
if (flag==0)flip(1,a+1,b+1,1,n);
else cout << query(1,a+1,b+1,1,n) << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKc3RhdGljIGludCBjb2luc1s0MDAwMDBdOwppbnQgcXVlcnkoaW50IG5vZGUsaW50IGEsaW50IGIsaW50IHN0YXJ0LGludCBkZXN0KQp7CiAgICBpbnQgcmVzKDApOwogICAgaWYgKHN0YXJ0PmRlc3R8fHN0YXJ0PmJ8fGRlc3Q8YSlyZXR1cm4gcmVzOwogICAgZWxzZSBpZiAoc3RhcnQ9PWRlc3QpcmV0dXJuIGNvaW5zW25vZGVdOwogICAgZWxzZQogICAgewogICAgICAgIGludCBhMT1xdWVyeShub2RlKjIsYSxiLHN0YXJ0LG1heChkZXN0LzIsc3RhcnQpKTsKICAgICAgICBpbnQgYTI9cXVlcnkobm9kZSoyKzEsYSxiLG1heChkZXN0LzIsc3RhcnQpKzEsZGVzdCk7CiAgICAgICAgcmVzPWExK2EyOwogICAgICAgIHJldHVybiByZXM7CiAgICB9Cn0Kdm9pZCBmbGlwIChpbnQgbm9kZSxpbnQgYSxpbnQgYixpbnQgc3RhcnQsaW50IGRlc3QpCnsKICAgIGlmIChzdGFydD5kZXN0fHxzdGFydD5ifHxkZXN0PGEpcmV0dXJuIDsKICAgIGVsc2UgaWYgKHN0YXJ0PT1kZXN0KWNvaW5zW25vZGVdPShjb2luc1tub2RlXSsxKSUyOwogICAgZWxzZSB7CiAgICAgICAgICAgIGZsaXAobm9kZSoyLGEsYixzdGFydCxtYXgoZGVzdC8yLHN0YXJ0KSk7CiAgICBmbGlwKG5vZGUqMisxLGEsYixtYXgoZGVzdC8yLHN0YXJ0KSsxLGRlc3QpOwogICAgY29pbnNbbm9kZV09Y29pbnNbbm9kZSoyXStjb2luc1tub2RlKjIrMV07fQp9CmludCBtYWluKCkKewogICBpbnQgbixxOwogICBzY2FuZigiJWQlZCIsJm4sJnEpOwogICBmb3IgKGludCBjKDApO2M8cTtjKyspCiAgIHsKICAgICAgIGludCBmbGFnLGEsYjsKICAgICAgIHNjYW5mKCIlZCVkJWQiLCZmbGFnLCZhLCZiKTsKCiAgICBpZiAoZmxhZz09MClmbGlwKDEsYSsxLGIrMSwxLG4pOwogICAgICAgZWxzZSBjb3V0IDw8IHF1ZXJ5KDEsYSsxLGIrMSwxLG4pIDw8IGVuZGw7CgogICB9CiAgICByZXR1cm4gMDsKfQo=