#include <bits/stdc++.h>
using namespace std;
int a[10000][10];
int aa[10000][2];
int dd[1000000];
int jiao(int x1, int y1, int x2, int y2) {
  if (y1 < x2) return 0;
  if (y2 < x1) return 0;
  return 1;
}
int main() {
  int i, j, n, q;
  set<int> st;
  memset(dd, 0, sizeof(dd));
  for (i = 1; i < 1000000; i *= 2) dd[i] = 1;
  dd[0] = 0;
  for (i = 1; i < 1000000; i++) {
    dd[i] += dd[i - 1];
  }
  scanf("%d%d", &n, &q);
  for (i = 0; i < q; i++) {
    scanf("%d", &a[i][0]);
    if (a[i][0] == 1) {
      scanf("%d%d%d%d", &a[i][1], &a[i][2], &a[i][3], &a[i][4]);
    } else {
      scanf("%d%d", &a[i][1], &a[i][2]);
      aa[a[i][1]][0] = a[i][2];
      aa[a[i][1]][1] = a[i][2];
      for (j = a[i][1] + 1; j <= n; j++) {
        aa[j][0] = aa[j - 1][0] - 1 + dd[aa[j - 1][0] - 1] + 1;
        aa[j][1] = aa[j - 1][1] + dd[aa[j - 1][1]];
      }
      st.clear();
      for (j = 0; j < i; j++) {
        if (a[j][0] == 1) {
          if (a[j][1] >= a[i][1]) {
            if (jiao(a[j][2], a[j][3], aa[a[j][1]][0], aa[a[j][1]][1]) == 1)
              st.insert(a[j][4]);
          }
        }
      }
      printf("%d\n", (int)st.size());
    }
  }
  return 0;
}
