#include <bits/stdc++.h>
using namespace std;
const int N = 5000 + 1;
const int M = 100000 + 1;
int C[N][N], n, flag[N][N], Tim;
int op[M], len[M], Xs[M], Ys[M], dir[M];
int q;
struct Data {
  int x, y, mapx, typ, id;
  Data() {}
  Data(int x, int y, int mapx, int typ, int id)
      : x(x), y(y), mapx(mapx), typ(typ), id(id) {}
  bool operator<(const Data &rhs) const {
    return mapx > rhs.mapx || mapx == rhs.mapx && id < rhs.id;
  }
};
Data a[M];
void add(int x, int y) {
  for (; x <= n; x += x & -x) {
    for (int ty = y; ty <= n; ty += ty & -ty) {
      if (flag[x][ty] != Tim) {
        flag[x][ty] = Tim;
        C[x][ty] = 0;
      }
      C[x][ty]++;
    }
  }
}
int query(int x, int y) {
  int ret = 0;
  for (; x; x -= x & -x) {
    for (int ty = y; ty; ty -= ty & -ty) {
      if (flag[x][ty] != Tim) {
        flag[x][ty] = Tim;
        C[x][ty] = 0;
      }
      ret += C[x][ty];
    }
  }
  return ret;
}
int res[M];
void solve(int l, int r) {
  if (l >= r) return;
  int mid = l + r >> 1;
  solve(l, mid);
  solve(mid + 1, r);
  int cnt0 = 0, cnt1 = 0;
  vector<Data> vec;
  for (int i = l; i <= mid; i++) {
    if (a[i].typ == 0) {
      vec.push_back(a[i]);
      cnt0++;
    }
  }
  for (int i = mid + 1; i <= r; i++) {
    if (a[i].typ == 1) {
      vec.push_back(a[i]);
      cnt1++;
    }
  }
  if (!cnt0 || !cnt1) return;
  Tim--;
  sort(vec.begin(), vec.end());
  for (int i = 0; i < vec.size(); i++) {
    if (vec[i].typ == 0) {
      add(vec[i].x, vec[i].y);
    } else {
      res[vec[i].id] += query(vec[i].x, vec[i].y);
    }
  }
}
void Go() {
  for (int d = 1, tot; d <= 4; d++) {
    tot = 0;
    for (int i = 0; i < q; i++) {
      if (op[i] == 1 && dir[i] != d) continue;
      int mapX = (d > 2) ? n + 1 - Xs[i] : Xs[i];
      int mapY = (d & 1 ^ 1) ? n + 1 - Ys[i] : Ys[i];
      if (op[i] == 1) {
        a[tot++] = Data(mapX, mapY, mapX + mapY + len[i], 0, i);
      } else {
        a[tot++] = Data(mapX, mapY, mapX + mapY, 1, i);
      }
    }
    solve(0, tot - 1);
  }
}
int main() {
  scanf("%d%d", &n, &q);
  for (int i = 0; i < q; i++) {
    scanf("%d", op + i);
    if (op[i] == 1) {
      scanf("%d%d%d%d", dir + i, Xs + i, Ys + i, len + i);
    } else {
      scanf("%d%d", Xs + i, Ys + i);
    }
  }
  Go();
  for (int i = 0; i < q; i++) {
    if (op[i] == 2) {
      printf("%d\n", res[i]);
    }
  }
  return 0;
}
