#include <bits/stdc++.h>
using namespace std;
const int maxN = 1e3 + 5;
long long bit[4][maxN][maxN];
int n, m;
int Cal(int i, int j) {
  int res = 0;
  if (i % 2 == 1) res++;
  if (j % 2 == 1) res += 2;
  return res;
}
long long Get(int x1, int y1) {
  long long res = 0;
  int id = Cal(x1, y1);
  for (int x = x1; x > 0; x -= x & (-x))
    for (int y = y1; y > 0; y -= y & (-y)) res ^= bit[id][x][y];
  return res;
}
void Update(int x1, int y1, long long value) {
  int id = Cal(x1, y1);
  for (int x = x1; x <= n; x += x & (-x))
    for (int y = y1; y <= n; y += y & (-y)) bit[id][x][y] ^= value;
}
int main() {
  scanf("%d%d\n", &n, &m);
  int id, x1, y1, x2, y2;
  long long value;
  while (m--) {
    scanf("%d", &id);
    if (id == 1) {
      scanf("%d%d%d%d\n", &x1, &y1, &x2, &y2);
      long long res = Get(x2, y2);
      res ^= Get(x1 - 1, y2);
      res ^= Get(x2, y1 - 1);
      res ^= Get(x1 - 1, y1 - 1);
      cout << res << "\n";
    } else {
      scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
      cin >> value;
      Update(x1, y1, value);
      Update(x2 + 1, y1, value);
      Update(x1, y2 + 1, value);
      Update(x2 + 1, y2 + 1, value);
    }
  }
  return 0;
}
