#include <bits/stdc++.h>
using namespace std;
int sumv[5005][10005];
void add(int x, int y, int num) {
  for (int i = x; i; i -= (i & -i))
    for (int j = y; j; j -= (j & -j)) sumv[i][j] += num;
}
int sum(int x, int y, int n, int m) {
  int s = 0;
  for (int i = x; i <= n; i += (i & -i))
    for (int j = y; j <= m; j += (j & -j)) s += sumv[i][j];
  return s;
}
void add(int l1, int r1, int l2, int r2, int num) {
  add(r1, r2, num);
  add(r1, l2 - 1, -num);
  add(l1 - 1, r2, -num);
  add(l1 - 1, l2 - 1, num);
}
struct Data {
  int kind, x, y, d;
  Data() {}
  Data(int a, int b, int c, int d) : kind(a), x(b), y(c), d(d) {}
};
Data a[100005];
int ans[100005];
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int kind;
    scanf("%d", &kind);
    if (kind == 1) {
      int aa, bb, cc, dd;
      scanf("%d%d%d%d", &aa, &bb, &cc, &dd);
      a[i] = Data(aa, bb, cc, dd);
    } else {
      int x, y;
      scanf("%d%d", &x, &y);
      a[i] = Data(5, x, y, 0);
    }
  }
  memset(sumv, 0, sizeof(sumv));
  for (int i = 1; i <= m; i++) {
    if (a[i].kind == 1) add(1, a[i].x - 1, 1, a[i].y - 1, 1);
    if (a[i].kind == 2) add(1, a[i].x - 1, a[i].y + 1, n, 1);
    if (a[i].kind == 3) add(a[i].x + 1, n, 1, a[i].y - 1, 1);
    if (a[i].kind == 4) add(a[i].x + 1, n, a[i].y + 1, n, 1);
    if (a[i].kind == 5) ans[i] += sum(a[i].x, a[i].y, n, n);
  }
  memset(sumv, 0, sizeof(sumv));
  for (int i = 1; i <= m; i++) {
    if (a[i].kind == 1) add(a[i].x, n, 1, a[i].x + a[i].y + a[i].d, 1);
    if (a[i].kind == 4) add(1, a[i].x, a[i].x + a[i].y - a[i].d, n * 2, 1);
    if (a[i].kind == 5) ans[i] += sum(a[i].x, a[i].x + a[i].y, n, n * 2);
  }
  memset(sumv, 0, sizeof(sumv));
  for (int i = 1; i <= m; i++) {
    if (a[i].kind == 1) add(1, a[i].y - 1, 1, a[i].x + a[i].y + a[i].d, -1);
    if (a[i].kind == 4) add(a[i].y + 1, n, a[i].x + a[i].y - a[i].d, n * 2, -1);
    if (a[i].kind == 5) ans[i] += sum(a[i].y, a[i].x + a[i].y, n, n * 2);
  }
  memset(sumv, 0, sizeof(sumv));
  for (int i = 1; i <= m; i++) {
    if (a[i].kind == 2) add(a[i].x, n, 1, a[i].x - a[i].y + a[i].d + n, 1);
    if (a[i].kind == 3) add(1, a[i].x, a[i].x - a[i].y - a[i].d + n, 2 * n, 1);
    if (a[i].kind == 5) ans[i] += sum(a[i].x, a[i].x - a[i].y + n, n, n * 2);
  }
  memset(sumv, 0, sizeof(sumv));
  for (int i = 1; i <= m; i++) {
    if (a[i].kind == 2) add(a[i].y + 1, n, 1, a[i].x - a[i].y + a[i].d + n, -1);
    if (a[i].kind == 3)
      add(1, a[i].y - 1, a[i].x - a[i].y - a[i].d + n, 2 * n, -1);
    if (a[i].kind == 5) ans[i] += sum(a[i].y, a[i].x - a[i].y + n, n, n * 2);
  }
  for (int i = 1; i <= m; i++)
    if (a[i].kind == 5) printf("%d\n", ans[i]);
  return 0;
}
