#include <bits/stdc++.h>
using namespace std;
template <typename Abel>
struct BIT2D {
  vector<vector<Abel>> dat[4];
  BIT2D(int h, int w) {
    for (int which = 0; which < 4; which++)
      dat[which].assign(h + 1, vector<Abel>(w + 1));
  }
  inline void sub_add(int which, int a, int b, Abel x) {
    int h = dat[which].size(), w = dat[which][0].size();
    for (int i = a; i < h; i += i & -i)
      for (int j = b; j < w; j += j & -j) dat[which][i][j] += x;
  }
  inline void add(int si, int sj, Abel x) {
    sub_add(0b00, si, sj, x * (si - 1) * (sj - 1));
    sub_add(0b10, si, sj, -x * (si - 1));
    sub_add(0b01, si, sj, -x * (sj - 1));
    sub_add(0b11, si, sj, x);
  }
  inline void add(int si, int ti, int sj, int tj, Abel x) {
    add(si, sj, x), add(si, tj, -x), add(ti, sj, -x), add(ti, tj, x);
  }
  inline Abel sub_sum(int which, int a, int b) {
    Abel res = Abel(0);
    for (int i = a; i > 0; i -= i & -i)
      for (int j = b; j > 0; j -= j & -j) res += dat[which][i][j];
    return res;
  }
  inline Abel sum(int si, int sj) {
    Abel res = Abel(0);
    res += sub_sum(0b00, si - 1, sj - 1);
    res += sub_sum(0b10, si - 1, sj - 1) * (sj - 1);
    res += sub_sum(0b01, si - 1, sj - 1) * (si - 1);
    res += sub_sum(0b11, si - 1, sj - 1) * (si - 1) * (sj - 1);
    return res;
  }
  inline Abel sum(int si, int ti, int sj, int tj) {
    return sum(ti, tj) - sum(si, tj) - sum(ti, sj) + sum(si, sj);
  }
};
struct Xor {
  long long val;
  Xor(long long val_ = 0) : val(val_) {}
  Xor operator=(long long val_) {
    this->val = val_;
    return *this;
  }
  Xor operator-() { return val; }
  const Xor &operator+=(const Xor &x);
  const Xor &operator-=(const Xor &x);
  friend ostream &operator<<(ostream &os, const Xor &a) { return os << a.val; }
};
Xor operator+(Xor x, Xor y) { return x.val ^ y.val; }
Xor operator-(Xor x, Xor y) { return x.val ^ y.val; }
Xor operator*(Xor x, int p) { return p & 1 ? x : 0; }
const Xor &Xor::operator+=(const Xor &x) { return *this = *this + x; }
const Xor &Xor::operator-=(const Xor &x) { return *this = *this - x; }
int main() {
  cin.tie(nullptr);
  ios::sync_with_stdio(false);
  int n, m;
  cin >> n >> m;
  BIT2D<Xor> bit(n, n);
  while (m--) {
    int op;
    cin >> op;
    int si, sj, ti, tj;
    cin >> si >> sj >> ti >> tj;
    if (op == 1) {
      cout << bit.sum(si, ti + 1, sj, tj + 1) << endl;
    }
    if (op == 2) {
      long long v;
      cin >> v;
      bit.add(si, ti + 1, sj, tj + 1, v);
    }
  }
  return 0;
}
