#include <bits/stdc++.h>
#define ll long long
#define el "\n"
#define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define __ROOT__ int main()
#pragma GCC optimize("O2")
#define fi first
#define se second
#define M 1000000007
#define MAXN 200001
#define GIOIHAN 1000001
#define BLOCK_SIZE 425
#define MAX_NODE 1001001
#define LOG 19
#define ALPHA_SIZE 26
#define BASE 311
#define NAME "file"
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
using namespace std;
const ll MOD[] = {(ll)1e9 + 2277, (ll)1e9 + 5277, (ll)1e9 + 8277, (ll)1e9 + 9277, (ll)1e9 + 7};
const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, 1, 0, -1};
ll n, q;
ll arr[MAXN];
struct Dataupdate {
ll l, r, val;
};
stack<Dataupdate> st;
struct Seg {
ll val[MAXN << 2], lazy[MAXN << 2];
void fix(ll id, ll l, ll r) {
if (lazy[id]) {
if( (r- l + 1) % 2 == 1) val[id] ^= lazy[id];
if (l != r) {
lazy[id << 1] ^= lazy[id];
lazy[id << 1 | 1] ^= lazy[id];
}
lazy[id] = 0;
}
}
void update(ll id, ll l, ll r, ll u, ll v, ll value) {
fix(id, l, r);
if (u > r || v < l) return;
if (u <= l && v >= r) {
lazy[id] = value;
fix(id, l, r);
return;
}
ll m = (l + r) >> 1;
update(id << 1, l, m, u, v, value);
update(id << 1 | 1, m + 1, r, u, v, value);
val[id] = val[id << 1] ^ val[id << 1 | 1];
}
ll get(ll id, ll l, ll r, ll u, ll v) {
fix(id, l, r);
if (u > r || v < l) return 0;
if (u <= l && v >= r) return val[id];
ll m = (l + r) >> 1;
return get(id << 1, l, m, u, v) ^ get(id << 1 | 1, m + 1, r, u, v);
}
} seg;
void init() {
cin >> n >> q;
}
void solve() {
for (ll i = 0; i < q; i++) {
ll t;
cin >> t;
if (t == 1) {
ll l, r, x;
cin >> l >> r >> x;
seg.update(1, 1, n, l, r, x);
st.push({l, r, x});
} else {
ll l, r;
cin >> l >> r;
cout << seg.get(1, 1, n, l, r) << el;
while (!st.empty()) {
Dataupdate t = st.top();
st.pop();
seg.update(1, 1, n, t.l, t.r, t.val);
}
}
}
}
__ROOT__ {
fast;
init();
solve();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZWwgIlxuIgojZGVmaW5lIGZhc3QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiNkZWZpbmUgX19ST09UX18gaW50IG1haW4oKQojcHJhZ21hIEdDQyBvcHRpbWl6ZSgiTzIiKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgTSAxMDAwMDAwMDA3CiNkZWZpbmUgTUFYTiAyMDAwMDEKI2RlZmluZSBHSU9JSEFOIDEwMDAwMDEKI2RlZmluZSBCTE9DS19TSVpFIDQyNQojZGVmaW5lIE1BWF9OT0RFIDEwMDEwMDEKI2RlZmluZSBMT0cgMTkKI2RlZmluZSBBTFBIQV9TSVpFIDI2CiNkZWZpbmUgQkFTRSAzMTEKI2RlZmluZSBOQU1FICJmaWxlIgojZGVmaW5lIGNvbXBhcmUodikgc29ydCgodikuYmVnaW4oKSwgKHYpLmVuZCgpKTsgKHYpLmVyYXNlKHVuaXF1ZSgodikuYmVnaW4oKSwgKHYpLmVuZCgpKSwgKHYpLmVuZCgpKTsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgbGwgTU9EW10gPSB7KGxsKTFlOSArIDIyNzcsIChsbCkxZTkgKyA1Mjc3LCAobGwpMWU5ICsgODI3NywgKGxsKTFlOSArIDkyNzcsIChsbCkxZTkgKyA3fTsKY29uc3QgaW50IGR4W10gPSB7LTEsIDAsIDEsIDB9Owpjb25zdCBpbnQgZHlbXSA9IHswLCAxLCAwLCAtMX07CgpsbCBuLCBxOwpsbCBhcnJbTUFYTl07CgpzdHJ1Y3QgRGF0YXVwZGF0ZSB7CiAgICBsbCBsLCByLCB2YWw7Cn07CnN0YWNrPERhdGF1cGRhdGU+IHN0OwoKc3RydWN0IFNlZyB7CiAgICBsbCB2YWxbTUFYTiA8PCAyXSwgbGF6eVtNQVhOIDw8IDJdOwoKICAgIHZvaWQgZml4KGxsIGlkLCBsbCBsLCBsbCByKSB7CiAgICAgICAgaWYgKGxhenlbaWRdKSB7CiAgICAgICAgICBpZiggKHItIGwgKyAxKSAlIDIgPT0gMSkgIHZhbFtpZF0gXj0gbGF6eVtpZF07CiAgICAgICAgICAgIGlmIChsICE9IHIpIHsKICAgICAgICAgICAgICAgIGxhenlbaWQgPDwgMV0gXj0gbGF6eVtpZF07CiAgICAgICAgICAgICAgICBsYXp5W2lkIDw8IDEgfCAxXSBePSBsYXp5W2lkXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBsYXp5W2lkXSA9IDA7CiAgICAgICAgfQogICAgfQoKICAgIHZvaWQgdXBkYXRlKGxsIGlkLCBsbCBsLCBsbCByLCBsbCB1LCBsbCB2LCBsbCB2YWx1ZSkgewogICAgICAgIGZpeChpZCwgbCwgcik7CiAgICAgICAgaWYgKHUgPiByIHx8IHYgPCBsKSByZXR1cm47CiAgICAgICAgaWYgKHUgPD0gbCAmJiB2ID49IHIpIHsKICAgICAgICAgICAgbGF6eVtpZF0gPSB2YWx1ZTsKICAgICAgICAgICAgZml4KGlkLCBsLCByKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBsbCBtID0gKGwgKyByKSA+PiAxOwogICAgICAgIHVwZGF0ZShpZCA8PCAxLCBsLCBtLCB1LCB2LCB2YWx1ZSk7CiAgICAgICAgdXBkYXRlKGlkIDw8IDEgfCAxLCBtICsgMSwgciwgdSwgdiwgdmFsdWUpOwogICAgICAgIHZhbFtpZF0gPSB2YWxbaWQgPDwgMV0gXiB2YWxbaWQgPDwgMSB8IDFdOwogICAgfQoKICAgIGxsIGdldChsbCBpZCwgbGwgbCwgbGwgciwgbGwgdSwgbGwgdikgewogICAgICAgIGZpeChpZCwgbCwgcik7CiAgICAgICAgaWYgKHUgPiByIHx8IHYgPCBsKSByZXR1cm4gMDsKICAgICAgICBpZiAodSA8PSBsICYmIHYgPj0gcikgcmV0dXJuIHZhbFtpZF07CiAgICAgICAgbGwgbSA9IChsICsgcikgPj4gMTsKICAgICAgICByZXR1cm4gZ2V0KGlkIDw8IDEsIGwsIG0sIHUsIHYpIF4gZ2V0KGlkIDw8IDEgfCAxLCBtICsgMSwgciwgdSwgdik7CiAgICB9Cn0gc2VnOwoKdm9pZCBpbml0KCkgewogICAgY2luID4+IG4gPj4gcTsKfQoKdm9pZCBzb2x2ZSgpIHsKICAgIGZvciAobGwgaSA9IDA7IGkgPCBxOyBpKyspIHsKICAgICAgICBsbCB0OwogICAgICAgIGNpbiA+PiB0OwogICAgICAgIGlmICh0ID09IDEpIHsKICAgICAgICAgICAgbGwgbCwgciwgeDsKICAgICAgICAgICAgY2luID4+IGwgPj4gciA+PiB4OwogICAgICAgICAgICBzZWcudXBkYXRlKDEsIDEsIG4sIGwsIHIsIHgpOwogICAgICAgICAgICBzdC5wdXNoKHtsLCByLCB4fSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGwgbCwgcjsKICAgICAgICAgICAgY2luID4+IGwgPj4gcjsKICAgICAgICAgICAgY291dCA8PCBzZWcuZ2V0KDEsIDEsIG4sIGwsIHIpIDw8IGVsOwogICAgICAgICAgICB3aGlsZSAoIXN0LmVtcHR5KCkpIHsKICAgICAgICAgICAgICAgIERhdGF1cGRhdGUgdCA9IHN0LnRvcCgpOwogICAgICAgICAgICAgICAgc3QucG9wKCk7CiAgICAgICAgICAgICAgICBzZWcudXBkYXRlKDEsIDEsIG4sIHQubCwgdC5yLCB0LnZhbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCl9fUk9PVF9fIHsKICAgIGZhc3Q7CiAgICBpbml0KCk7CiAgICBzb2x2ZSgpOwp9Cg==