uses math;
var it, s: array[0..400001] of longint;
p: array[0..400001] of boolean;
n, m: longint;
{------------------------------}
procedure down(c, l, r: longint);
begin
p[l] := p[c];
p[r] := p[c];
if p[c] then
begin
it[l] := s[l] - it[l];
it[r] := s[r] - it[r];
end;
p[c] := false;
end;
{------------------------------}
procedure update(x, l, r, u, v: longint);
var c, g: longint;
begin
s[x] := r - l + 1;
if (l > v) or (r < u) then
exit;
if (l >= u) and (r <= v) then
begin
p[x] := true;
it[x] := s[x] - it[x];
exit;
end;
c := x * 2;
g := (l + r) div 2;
s[c] := g - l + 1;
s[c + 1] := r - g;
down(x, c, c + 1);
update(c, l, g, u, v);
update(c + 1, g + 1, r, u, v);
it[x] := it[c] + it[c + 1];
end;
{------------------------------}
function query(x, l, r, u, v: longint): longint;
var c, g, t1, t2: longint;
begin
s[x] := r - l + 1;
if (l > v) or (r < u) then
exit(0);
if (l >= u) and (r <= v) then
exit(it[x]);
c := x * 2;
g := (l + r) div 2;
s[c] := g - l + 1;
s[c + 1] := r - g;
down(x, c, c + 1);
t1 := query(c, l, g, u, v);
t2 := query(c + 1, g + 1, r, u, v);
it[x] := it[c] + it[c + 1];
exit(t1 + t2);
end;
{------------------------------}
procedure solve;
var i, u, v, c: longint;
begin
readln(n, m);
for i := 1 to m do
begin
read(c);
if c = 0 then
begin
readln(u, v);
update(1, 1, n, u, v);
end
else
begin
readln(u, v);
writeln(query(1, 1, n, u, v));
end;
end;
end;
{------------------------------}
begin
solve;
end.
dXNlcyBtYXRoOwp2YXIgaXQsIHM6IGFycmF5WzAuLjQwMDAwMV0gb2YgbG9uZ2ludDsKCXA6IGFycmF5WzAuLjQwMDAwMV0gb2YgYm9vbGVhbjsKCW4sIG06IGxvbmdpbnQ7CnstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS19CnByb2NlZHVyZSBkb3duKGMsIGwsIHI6IGxvbmdpbnQpOwpiZWdpbgoJcFtsXSA6PSBwW2NdOwoJcFtyXSA6PSBwW2NdOwoJaWYgcFtjXSB0aGVuCgkJYmVnaW4KCQkJaXRbbF0gOj0gc1tsXSAtIGl0W2xdOwoJCQlpdFtyXSA6PSBzW3JdIC0gaXRbcl07CgkJZW5kOwoJcFtjXSA6PSBmYWxzZTsKZW5kOwp7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfQpwcm9jZWR1cmUgdXBkYXRlKHgsIGwsIHIsIHUsIHY6IGxvbmdpbnQpOwp2YXIgYywgZzogbG9uZ2ludDsKYmVnaW4KCXNbeF0gOj0gciAtIGwgKyAxOwoJaWYgKGwgPiB2KSBvciAociA8IHUpIHRoZW4KCQlleGl0OwoJaWYgKGwgPj0gdSkgYW5kIChyIDw9IHYpIHRoZW4KCQliZWdpbgoJCQlwW3hdIDo9IHRydWU7CgkJCWl0W3hdIDo9IHNbeF0gLSBpdFt4XTsKCQkJZXhpdDsKCQllbmQ7CgljIDo9IHggKiAyOwoJZyA6PSAobCArIHIpIGRpdiAyOwoJc1tjXSA6PSBnIC0gbCArIDE7CglzW2MgKyAxXSA6PSByIC0gZzsKCWRvd24oeCwgYywgYyArIDEpOwoJdXBkYXRlKGMsIGwsIGcsIHUsIHYpOwoJdXBkYXRlKGMgKyAxLCBnICsgMSwgciwgdSwgdik7CglpdFt4XSA6PSBpdFtjXSArIGl0W2MgKyAxXTsKZW5kOwp7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfQpmdW5jdGlvbiBxdWVyeSh4LCBsLCByLCB1LCB2OiBsb25naW50KTogbG9uZ2ludDsKdmFyIGMsIGcsIHQxLCB0MjogbG9uZ2ludDsKYmVnaW4KCXNbeF0gOj0gciAtIGwgKyAxOwoJaWYgKGwgPiB2KSBvciAociA8IHUpIHRoZW4KCQlleGl0KDApOwoJaWYgKGwgPj0gdSkgYW5kIChyIDw9IHYpIHRoZW4KCQlleGl0KGl0W3hdKTsKCWMgOj0geCAqIDI7CglnIDo9IChsICsgcikgZGl2IDI7CglzW2NdIDo9IGcgLSBsICsgMTsKCXNbYyArIDFdIDo9IHIgLSBnOwoJZG93bih4LCBjLCBjICsgMSk7Cgl0MSA6PSBxdWVyeShjLCBsLCBnLCB1LCB2KTsKCXQyIDo9IHF1ZXJ5KGMgKyAxLCBnICsgMSwgciwgdSwgdik7CglpdFt4XSA6PSBpdFtjXSArIGl0W2MgKyAxXTsKCWV4aXQodDEgKyB0Mik7CmVuZDsKey0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLX0KcHJvY2VkdXJlIHNvbHZlOwp2YXIgaSwgdSwgdiwgYzogbG9uZ2ludDsKYmVnaW4KCXJlYWRsbihuLCBtKTsKCWZvciBpIDo9IDEgdG8gbSBkbwoJCWJlZ2luCgkJCXJlYWQoYyk7CgkJCWlmIGMgPSAwIHRoZW4KCQkJCWJlZ2luCgkJCQkJcmVhZGxuKHUsIHYpOwoJCQkJCXVwZGF0ZSgxLCAxLCBuLCB1LCB2KTsKCQkJCWVuZAoJCQllbHNlCgkJCQliZWdpbgoJCQkJCXJlYWRsbih1LCB2KTsKCQkJCQl3cml0ZWxuKHF1ZXJ5KDEsIDEsIG4sIHUsIHYpKTsKCQkJCWVuZDsKCQllbmQ7CmVuZDsKey0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLX0KYmVnaW4KCXNvbHZlOwplbmQu