#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
template <typename T>
struct fenwick {
  int n;
  vector<vector<T>> t;
  T sum(int rx, int ry) {
    if (rx < 0 || ry < 0) return 0;
    rx = min(rx, n - 1);
    ry = min(ry, n - 1);
    T ans = 0;
    for (int r = rx; r >= 0; r = (r & (r + 1)) - 1)
      for (int r1 = ry; r1 >= 0; r1 = (r1 & (r1 + 1)) - 1) ans ^= t[r][r1];
    return ans;
  }
  T sum(int x1, int y1, int x2, int y2) {
    return sum(x2, y2) ^ sum(x2, y1 - 1) ^ sum(x1 - 1, y2) ^
           sum(x1 - 1, y1 - 1);
  }
  void inc(int x, int y, T z) {
    for (int i = x; i < n; i |= i + 1)
      for (int j = y; j < n; j |= j + 1) t[i][j] ^= z;
  }
  fenwick() : n(N), t(N, vector<long long>(N, 0)) {}
};
struct solver {
  fenwick<long long> ft;
  fenwick<long long> fe;
  fenwick<long long> fu;
  fenwick<long long> fh;
  void upd(long long x, long long y, long long z) {
    if (x % 2 == 0 && y % 2 == 0) fe.inc(x + 1, y + 1, z);
    if (x % 2 == 0) {
      fu.inc(x + 1, 0, z);
      fu.inc(x + 1, y + 1, z);
    }
    if (y % 2 == 0) {
      fh.inc(0, y + 1, z);
      fh.inc(x + 1, y + 1, z);
    }
    ft.inc(0, 0, z);
    x /= 2;
    y /= 2;
    ft.inc(x + 1, y + 1, z);
    ft.inc(0, y + 1, z);
    ft.inc(x + 1, 0, z);
  }
  long long sum(long long x, long long y) {
    long long ans = 0;
    if (x % 2 == 0 && y % 2 == 0) ans ^= ft.sum(x / 2, y / 2);
    ans ^= fe.sum(x, y);
    if (y % 2 == 0) ans ^= fu.sum(x, y);
    if (x % 2 == 0) ans ^= fh.sum(x, y);
    return ans;
  }
  solver() : ft(), fe(), fu(), fh() {}
} res;
int main() {
  ios_base::sync_with_stdio(0);
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int tp;
    cin >> tp;
    if (tp == 2) {
      int x0, y0, x1, y1;
      long long z;
      cin >> x0 >> y0 >> x1 >> y1 >> z;
      res.upd(x1, y1, z);
      res.upd(x0 - 1, y0 - 1, z);
      res.upd(x1, y0 - 1, z);
      res.upd(x0 - 1, y1, z);
    } else {
      int x0, y0, x1, y1;
      cin >> x0 >> y0 >> x1 >> y1;
      cout << (res.sum(x1, y1) ^ res.sum(x0 - 1, y1) ^ res.sum(x1, y0 - 1) ^
               res.sum(x0 - 1, y0 - 1))
           << endl;
    }
  }
  return 0;
}
