import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import static java.
lang.
Integer.
parseInt;
class FlippingCoins {
static int tree[] = new int[400010];
static int lazy[] = new int[400010];
static final int UNDEFINED = -1;
FastReader reader = FastReader.SYSTEM_READER;
int n, q;
//s = br.readLine().split("\\s");
n = reader.nextInt();
q = reader.nextInt();
Arrays.
fill(lazy,
0,
200010,
-1); for (int i = 0; i < q; i++) {
//s = br.readLine().split("\\s");
int type = reader.nextInt();
int A = reader.nextInt();
int B = reader.nextInt();
if (type == 1) {
System.
out.
println(query
(1,
0, n
- 1, A, B
)); } else {
update(1, 0, n - 1, A, B);
}
}
}
private static int query(int id, int start, int end, int a, int b) {
if (a > end || b < start) {
return 0;
}
if (start >= a && end <= b) {
return tree[id];
}
if (lazy[id] > 0) {
shift(id, start, end);
}
int mid = (start + end) / 2;
return query(id << 1, start, mid, a, b) + query((id << 1) + 1, mid + 1, end, a, b);
}
private static void update(int id, int start, int end, int a, int b) {
if (a > end || b < start) {
return;
}
if (start >= a && end <= b) {
updateNode(id, start, end);
return;
}
if (lazy[id] > 0) {
shift(id, start, end);
}
int mid = (start + end) / 2;
update(id << 1, start, mid, a, b);
update((id << 1) + 1, mid + 1, end, a, b);
tree[id] = tree[id << 1] + tree[(id << 1) + 1];
}
private static void updateNode(int id, int start, int end) {
lazy[id] = 1-lazy[id];
tree[id] = (end - start + 1) - tree[id];
}
private static void shift(int id, int start, int end) {
int mid = (start + end) / 2;
lazy[id << 1] = lazy[id];
lazy[(id << 1) + 1] = lazy[id];
tree[id << 1] = (mid - start + 1) - tree[id<<1];
tree[(id << 1) + 1] = (end - (mid + 1) + 1) - tree[(id << 1) + 1];
/*updateNode((id << 1), start, mid);
updateNode((id << 1) + 1, start, mid);*/
lazy[id] = 0;
}
static final class FastReader {
public static final FastReader SYSTEM_READER
= new FastReader
(System.
in); private final byte[] buffer = new byte[1 << 16];
private int pos, count;
this.in = in;
pos = count = 0;
}
public int nextInt() {
int c;
while ((c = read()) < '0');
int result = c - '0';
while ((c = read() - '0') >= 0)
result = 10 * result + c;
return result;
}
public long nextLong() {
int c;
while ((c = read()) < '0');
long result = c - '0';
while ((c = read() - '0') >= 0)
result = 10 * result + c;
return result;
}
StringBuilder s = new StringBuilder();
int c;
while ((c = read()) >= 33)
s.append((char) c);
return s.toString();
}
private void fillBuffer() {
try {
count = in.read(buffer, pos = 0, buffer.length);
}
}
public int read() {
if (pos == count)
fillBuffer();
return buffer[pos++];
}
}
}
aW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CmltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwppbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CmltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogCmltcG9ydCBzdGF0aWMgamF2YS5sYW5nLkludGVnZXIucGFyc2VJbnQ7CiAKY2xhc3MgRmxpcHBpbmdDb2lucyB7CiAKICAgIHN0YXRpYyBpbnQgdHJlZVtdID0gbmV3IGludFs0MDAwMTBdOwogICAgc3RhdGljIGludCBsYXp5W10gPSBuZXcgaW50WzQwMDAxMF07CiAgICBzdGF0aWMgZmluYWwgaW50IFVOREVGSU5FRCA9IC0xOwogCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihTeXN0ZW0uaW4pKTsKICAgICAgICBGYXN0UmVhZGVyIHJlYWRlciA9IEZhc3RSZWFkZXIuU1lTVEVNX1JFQURFUjsKICAgICAgICBpbnQgbiwgcTsKICAgICAgICBTdHJpbmcgc1tdOwogICAgICAgIC8vcyA9IGJyLnJlYWRMaW5lKCkuc3BsaXQoIlxccyIpOwogICAgICAgIG4gPSByZWFkZXIubmV4dEludCgpOwogICAgICAgIHEgPSByZWFkZXIubmV4dEludCgpOwogICAgICAgIEFycmF5cy5maWxsKGxhenksIDAsIDIwMDAxMCwgLTEpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcTsgaSsrKSB7CiAgICAgICAgICAgIC8vcyA9IGJyLnJlYWRMaW5lKCkuc3BsaXQoIlxccyIpOwogICAgICAgICAgICBpbnQgdHlwZSA9IHJlYWRlci5uZXh0SW50KCk7CiAgICAgICAgICAgIGludCBBID0gcmVhZGVyLm5leHRJbnQoKTsKICAgICAgICAgICAgaW50IEIgPSByZWFkZXIubmV4dEludCgpOwogICAgICAgICAgICBpZiAodHlwZSA9PSAxKSB7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocXVlcnkoMSwgMCwgbiAtIDEsIEEsIEIpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHVwZGF0ZSgxLCAwLCBuIC0gMSwgQSwgQik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAKICAgIHByaXZhdGUgc3RhdGljIGludCBxdWVyeShpbnQgaWQsIGludCBzdGFydCwgaW50IGVuZCwgaW50IGEsIGludCBiKSB7CiAgICAgICAgaWYgKGEgPiBlbmQgfHwgYiA8IHN0YXJ0KSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPj0gYSAmJiBlbmQgPD0gYikgewogICAgICAgICAgICByZXR1cm4gdHJlZVtpZF07CiAgICAgICAgfQogICAgICAgIGlmIChsYXp5W2lkXSA+IDApIHsKICAgICAgICAgICAgc2hpZnQoaWQsIHN0YXJ0LCBlbmQpOwogICAgICAgIH0KICAgICAgICBpbnQgbWlkID0gKHN0YXJ0ICsgZW5kKSAvIDI7CiAgICAgICAgcmV0dXJuIHF1ZXJ5KGlkIDw8IDEsIHN0YXJ0LCBtaWQsIGEsIGIpICsgcXVlcnkoKGlkIDw8IDEpICsgMSwgbWlkICsgMSwgZW5kLCBhLCBiKTsKICAgIH0KIAogICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB1cGRhdGUoaW50IGlkLCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBhLCBpbnQgYikgewogICAgICAgIGlmIChhID4gZW5kIHx8IGIgPCBzdGFydCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChzdGFydCA+PSBhICYmIGVuZCA8PSBiKSB7CiAgICAgICAgICAgIHVwZGF0ZU5vZGUoaWQsIHN0YXJ0LCBlbmQpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChsYXp5W2lkXSA+IDApIHsKICAgICAgICAgICAgc2hpZnQoaWQsIHN0YXJ0LCBlbmQpOwogICAgICAgIH0KICAgICAgICBpbnQgbWlkID0gKHN0YXJ0ICsgZW5kKSAvIDI7CiAgICAgICAgdXBkYXRlKGlkIDw8IDEsIHN0YXJ0LCBtaWQsIGEsIGIpOwogICAgICAgIHVwZGF0ZSgoaWQgPDwgMSkgKyAxLCBtaWQgKyAxLCBlbmQsIGEsIGIpOwogICAgICAgIHRyZWVbaWRdID0gdHJlZVtpZCA8PCAxXSArIHRyZWVbKGlkIDw8IDEpICsgMV07CiAgICB9CiAKICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdXBkYXRlTm9kZShpbnQgaWQsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgICAgIGxhenlbaWRdID0gMS1sYXp5W2lkXTsKICAgICAgICB0cmVlW2lkXSA9IChlbmQgLSBzdGFydCArIDEpIC0gdHJlZVtpZF07CiAgICB9CiAKICAgIHByaXZhdGUgc3RhdGljIHZvaWQgc2hpZnQoaW50IGlkLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgICAgICBpbnQgbWlkID0gKHN0YXJ0ICsgZW5kKSAvIDI7CiAgICAgICAgbGF6eVtpZCA8PCAxXSA9IGxhenlbaWRdOwogICAgICAgIGxhenlbKGlkIDw8IDEpICsgMV0gPSBsYXp5W2lkXTsKICAgICAgICB0cmVlW2lkIDw8IDFdID0gKG1pZCAtIHN0YXJ0ICsgMSkgLSB0cmVlW2lkPDwxXTsKICAgICAgICB0cmVlWyhpZCA8PCAxKSArIDFdID0gKGVuZCAtIChtaWQgKyAxKSArIDEpIC0gdHJlZVsoaWQgPDwgMSkgKyAxXTsKICAgICAgICAvKnVwZGF0ZU5vZGUoKGlkIDw8IDEpLCBzdGFydCwgbWlkKTsKICAgICAgICB1cGRhdGVOb2RlKChpZCA8PCAxKSArIDEsIHN0YXJ0LCBtaWQpOyovCiAgICAgICAgbGF6eVtpZF0gPSAwOwogICAgfQogCiAgICBzdGF0aWMgZmluYWwgY2xhc3MgRmFzdFJlYWRlciB7CiAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBGYXN0UmVhZGVyIFNZU1RFTV9SRUFERVIgPSBuZXcgRmFzdFJlYWRlcihTeXN0ZW0uaW4pOwogICAgICAgIHByaXZhdGUgZmluYWwgSW5wdXRTdHJlYW0gaW47CiAgICAgICAgcHJpdmF0ZSBmaW5hbCBieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbMSA8PCAxNl07CiAgICAgICAgcHJpdmF0ZSBpbnQgcG9zLCBjb3VudDsKIAogICAgICAgIHB1YmxpYyBGYXN0UmVhZGVyKElucHV0U3RyZWFtIGluKSB7CiAgICAgICAgICAgIHRoaXMuaW4gPSBpbjsKICAgICAgICAgICAgcG9zID0gY291bnQgPSAwOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyBpbnQgbmV4dEludCgpIHsKICAgICAgICAgICAgaW50IGM7CiAgICAgICAgICAgIHdoaWxlICgoYyA9IHJlYWQoKSkgPCAnMCcpOwogICAgICAgICAgICBpbnQgcmVzdWx0ID0gYyAtICcwJzsKICAgICAgICAgICAgd2hpbGUgKChjID0gcmVhZCgpIC0gJzAnKSA+PSAwKQogICAgICAgICAgICAgICAgcmVzdWx0ID0gMTAgKiByZXN1bHQgKyBjOwogICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgICBwdWJsaWMgbG9uZyBuZXh0TG9uZygpIHsKICAgICAgICAgICAgaW50IGM7CiAgICAgICAgICAgIHdoaWxlICgoYyA9IHJlYWQoKSkgPCAnMCcpOwogICAgICAgICAgICBsb25nIHJlc3VsdCA9IGMgLSAnMCc7CiAgICAgICAgICAgIHdoaWxlICgoYyA9IHJlYWQoKSAtICcwJykgPj0gMCkKICAgICAgICAgICAgICAgIHJlc3VsdCA9IDEwICogcmVzdWx0ICsgYzsKICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgU3RyaW5nIG5leHRTdHJpbmcoKSB7CiAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgcyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAgICAgICAgICAgIGludCBjOwogICAgICAgICAgICB3aGlsZSAoKGMgPSByZWFkKCkpID49IDMzKQogICAgICAgICAgICAgICAgcy5hcHBlbmQoKGNoYXIpIGMpOwogICAgICAgICAgICByZXR1cm4gcy50b1N0cmluZygpOwogICAgICAgIH0KIAogICAgICAgIHByaXZhdGUgdm9pZCBmaWxsQnVmZmVyKCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgY291bnQgPSBpbi5yZWFkKGJ1ZmZlciwgcG9zID0gMCwgYnVmZmVyLmxlbmd0aCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgaW50IHJlYWQoKSB7CiAgICAgICAgICAgIGlmIChwb3MgPT0gY291bnQpCiAgICAgICAgICAgICAgICBmaWxsQnVmZmVyKCk7CiAgICAgICAgICAgIHJldHVybiBidWZmZXJbcG9zKytdOwogICAgICAgIH0KICAgIH0KIAogCn0=