#include <bits/stdc++.h>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
#define pb push_back
#define inf 0x3f3f3f3f
ll n;int k;
int a[72],cnt;
ll dp[72][2][72];
void init(){
dp[1][0][0]=1;
dp[1][1][1]=1;
for (int i=2;i<72;i++){
for (int j=1;j<=i;j++){
dp[i][1][j]+=dp[i-1][1][j-1];
dp[i][1][j]+=dp[i-1][0][j-1];
}
for (int j=0;j<i;j++){
dp[i][0][j]+=dp[i-1][0][j];
dp[i][0][j]+=dp[i-1][1][j];
}
}
}
ll dp1(ll x){
cnt=0;
if (!x) return 0;
while (x) a[++cnt]=x%2, x/=2;
ll ans=0;int mid=0;
for (int i=cnt;i>0;i--){
if (a[i]==1){
if (mid>k) break;
ans+=dp[i][0][k-mid];
mid++;
}
}
return ans;
}
int main(){
init();
cin>>n>>k;
cout<<dp1(n)<<endl;
}