#include <bits/stdc++.h>
using namespace std;
inline int read() {
  char c = getchar();
  int x = 0;
  while (c < '0' || c > '9') {
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = x * 10 + (c ^ 48);
    c = getchar();
  }
  return x;
}
int n, m, q;
int c[10001][5001];
int x[100001], y[100001], dir[100001], len[100001];
inline int lowbit(int n) { return n & (-n); }
inline void add(int x, int y, int v) {
  for (int i = x; i <= m; i += lowbit(i)) {
    for (int j = y; j <= n; j += lowbit(j)) {
      c[i][j] += v;
    }
  }
  return;
}
inline int find(int x, int y) {
  int ans = 0;
  for (int i = x; i; i -= lowbit(i)) {
    for (int j = y; j; j -= lowbit(j)) {
      ans += c[i][j];
    }
  }
  return ans;
}
int ans[100001];
int main() {
  n = read();
  q = read();
  m = n;
  for (int i = 1; i <= q; i++) {
    int type;
    cin >> type;
    if (type == 1) {
      dir[i] = read();
      x[i] = read();
      y[i] = read();
      len[i] = read();
      switch (dir[i]) {
        case 1: {
          add(x[i], y[i], 1);
          add(x[i], y[i] + len[i] + 1, -1);
          break;
        }
        case 2: {
          add(x[i], y[i] - len[i], 1);
          add(x[i], y[i] + 1, -1);
          break;
        }
        case 3: {
          add(x[i] + 1, y[i] + len[i] + 1, 1);
          add(x[i] + 1, y[i], -1);
          break;
        }
        case 4: {
          add(x[i] + 1, y[i] + 1, 1);
          add(x[i] + 1, y[i] - len[i], -1);
          break;
        }
      }
    } else {
      x[i] = read();
      y[i] = read();
      ans[i] = find(x[i], y[i]);
    }
  }
  memset(c, 0, sizeof(c));
  m = 2 * n;
  for (int i = 1; i <= q; i++) {
    if (dir[i] == 2) {
      add(x[i] - y[i] + len[i] + n + 2, y[i] + 1, 1);
      add(x[i] - y[i] + len[i] + n + 2, y[i] - len[i], -1);
    } else if (dir[i] == 3) {
      add(x[i] - y[i] - len[i] + n + 1, y[i], 1);
      add(x[i] - y[i] - len[i] + n + 1, y[i] + len[i] + 1, -1);
    } else if (!dir[i]) {
      ans[i] += find(x[i] - y[i] + n + 1, y[i]);
    }
  }
  memset(c, 0, sizeof(c));
  for (int i = 1; i <= q; i++) {
    if (dir[i] == 1) {
      add(x[i] + y[i] + len[i] + 1, n - y[i] + 2, 1);
      add(x[i] + y[i] + len[i] + 1, n - y[i] - len[i] + 1, -1);
    } else if (dir[i] == 4) {
      add(x[i] + y[i] - len[i], n - y[i] + 1, 1);
      add(x[i] + y[i] - len[i], n - y[i] + len[i] + 2, -1);
    } else if (!dir[i]) {
      ans[i] += find(x[i] + y[i], n - y[i] + 1);
      printf("%d\n", ans[i]);
    }
  }
  return 0;
}
