#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e5+100;
ll sum[N];
ll fac[20];
int n,q;
ll cnt;
void init(){
for(int i=1;i<=n;i++){
sum[i]=sum[i-1]+i;
}
fac[0]=1;
for(int i=1;i<=17;i++){
fac[i]=fac[i-1]*i;
}
}
vector<int> Kthpermutation(int n,ll k){
k++;
vector<int> vec;
vector<int> res;
for(int i=0;i<n;i++) vec.push_back(i+1);
if(k==1) return vec;
ll base=fac[n-1];
k--;
for(int i=0;i<n-1;i++){
//if(base==0) continue;
ll divres=k/base;
k=k%base;
int num=vec[divres];
res.push_back(num);
vec.erase(vec.begin()+divres);
base=fac[n-2-i];
}
res.push_back(vec[0]);
return res;
}
int main(){
scanf("%d%d",&n,&q);
init();
while(q--){
int G;scanf("%d",&G);
int R=max(1,n-15);
if(G==1){
int l,r;scanf("%d%d",&l,&r);
if(r<R){
printf("%lld\n",sum[r]-sum[l-1]);
}
else{
ll ans=0;
int start;
if(l<R){
ans+=sum[R-1]-sum[l-1];
start=R;
}
else{
start=l;
}
vector<int> v;
v=Kthpermutation(n-(R-1),cnt);
for(int i=start-R;i<=r-R;i++){
ans=ans+v[i]+(R-1);
}
printf("%lld\n",ans);
}
}
else{
int x;scanf("%d",&x);
cnt+=x;
}
}
return 0;
}