#include <bits/stdc++.h>
using namespace std;
const int maxn = 1010;
int N;
long long c[4][maxn][maxn];
void upd(int p, int i, int j, long long x) {
  int jj = j;
  while (i <= N) {
    j = jj;
    while (j <= N) c[p][i][j] ^= x, j += j & (-j);
    i += i & (-i);
  }
}
long long get(int p, int i, int j) {
  int jj = j;
  long long ans = 0;
  while (i) {
    j = jj;
    while (j) ans ^= c[p][i][j], j -= j & (-j);
    i -= i & (-i);
  }
  return ans;
}
void upd(int i, int j, long long x) {
  upd(0, i, j, x);
  upd(1, i, j, x * (i % 2));
  upd(2, i, j, x * (j % 2));
  upd(3, i, j, x * (i % 2) * (j % 2));
}
long long get(int i, int j) {
  long long s0 = get(0, i, j);
  long long s1 = get(1, i, j);
  long long s2 = get(2, i, j);
  long long s3 = get(3, i, j);
  int x = i, y = j;
  x++, y++;
  x %= 2, y %= 2;
  return (x * y * s0) ^ (y * s1) ^ (x * s2) ^ (s3);
}
int main() {
  int n, m, i, j, k;
  int x0, x1, y0, y1;
  scanf("%d%d", &n, &m);
  N = n;
  while (m--) {
    scanf("%d", &i);
    if (i == 1) {
      scanf("%d%d%d%d", &x0, &y0, &x1, &y1);
      printf("%I64d\n", get(x1, y1) ^ get(x0 - 1, y1) ^ get(x1, y0 - 1) ^
                            get(x0 - 1, y0 - 1));
    } else {
      scanf("%d%d%d%d", &x0, &y0, &x1, &y1);
      long long v;
      scanf("%I64d", &v);
      upd(x0, y0, v);
      upd(x0, y1 + 1, v);
      upd(x1 + 1, y0, v);
      upd(x1 + 1, y1 + 1, v);
    }
  }
}
