#include <bits/stdc++.h>
using namespace std;
const long long MAX_N = 2e5 + 7;
long long fac[MAX_N] = {1ll,         1ll,          2ll,          6ll,
                        24ll,        120ll,        720ll,        5040ll,
                        40320ll,     362880ll,     3628800ll,    39916800ll,
                        479001600ll, 6227020800ll, 87178291200ll};
vector<long long> a, now;
long long n, q, tot = 14;
void init() {
  for (long long i = 0; i < tot; ++i) a.push_back(i + 1), now.push_back(i + 1);
}
vector<long long> change(long long x, vector<long long> a, long long n) {
  if (n == 1) return a;
  long long pos = x / fac[n - 1], mod = x % fac[n - 1];
  vector<long long> nxt, res;
  for (long long i = 0; i < n; ++i) {
    if (i == pos) continue;
    nxt.push_back(a[i]);
  }
  nxt = change(mod, nxt, n - 1);
  res.push_back(a[pos]);
  for (long long i = 0; i < n - 1; ++i) res.push_back(nxt[i]);
  return res;
}
inline long long sum(long long x) { return (x + 1) * x / 2; }
long long get_sum(long long l, long long r) {
  long long res = 0, dec;
  if (n <= tot) {
    dec = tot - n;
    for (long long i = l + dec; i <= r + dec; ++i) {
      res += now[i - 1] - dec;
    }
  } else {
    if (l <= n - tot) {
      res -= sum(l - 1);
      if (r <= n - tot) {
        res += sum(r);
      } else {
        res += sum(n - tot);
        for (long long i = 1; i <= r - n + tot; ++i) {
          res += now[i - 1] + n - tot;
        }
      }
    } else {
      for (long long i = l - n + tot; i <= r - n + tot; ++i) {
        res += now[i - 1] + n - tot;
      }
    }
  }
  return res;
}
signed main() {
  init();
  scanf("%lld%lld", &n, &q);
  long long add = 0;
  while (q--) {
    long long opt, x, l, r;
    scanf("%lld", &opt);
    if (opt == 1) {
      scanf("%lld%lld", &l, &r);
      printf("%lld\n", get_sum(l, r));
    } else {
      scanf("%lld", &x);
      add += x;
      now = change(add, a, tot);
    }
  }
  return 0;
}
