#include <bits/stdc++.h>
using namespace std;
struct FT {
  long long ft[1024 + 1][1024 + 1];
  void upd(int i0, int j0, long long v) {
    for (int i = i0; i <= 1024; i += i & -i)
      for (int j = j0; j <= 1024; j += j & -j) ft[i][j] ^= v;
  }
  long long get(int i0, int j0) {
    long long r = 0;
    for (int i = i0; i; i -= i & -i)
      for (int j = j0; j; j -= j & -j) r ^= ft[i][j];
    return r;
  }
};
FT f[2][2];
void upd(int i0, int j0, long long v) { f[i0 % 2][j0 % 2].upd(i0, j0, v); }
long long get(int i0, int j0) { return f[i0 % 2][j0 % 2].get(i0, j0); }
int n, m;
int main() {
  scanf("%d%d", &n, &m);
  while (m--) {
    int t, x0, x1, y0, y1;
    scanf("%d%d%d%d%d", &t, &x0, &y0, &x1, &y1);
    if (t == 1)
      printf("%lld\n", get(x1, y1) ^ get(x1, y0 - 1) ^ get(x0 - 1, y1) ^
                           get(x0 - 1, y0 - 1));
    else {
      long long v;
      scanf("%lld", &v);
      upd(x0, y0, v);
      upd(x1 + 1, y0, v);
      upd(x0, y1 + 1, v);
      upd(x1 + 1, y1 + 1, v);
    }
  }
  return 0;
}
