#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void amin(T &x, const T &y) {
  if (y < x) x = y;
}
template <class T>
inline void amax(T &x, const T &y) {
  if (x < y) x = y;
}
long long nCk(int n, int k) {
  long long ret = 1;
  for (int i = 0, i_len = (k); i < i_len; ++i) ret = ret * (n - i) / (i + 1);
  return ret;
}
long long N, T;
int main() {
  scanf("%lld%lld", &N, &T);
  N++;
  if (T & (T - 1)) {
    puts("0");
    return 0;
  }
  int P = 0;
  for (; ~T & (1LL << P); P++)
    ;
  long long ans = 0;
  if (T == 1) ans = -1;
  long long len = 1;
  for (int i = 0, i_len = (99); i < i_len; ++i) {
    if (len > N) {
      while (N) {
        i--;
        len /= 2;
        if (len <= N) {
          if (P >= 0 && i >= P) ans += nCk(i, P);
          N -= len;
          P--;
        }
      }
      break;
    }
    if (i >= P) ans += nCk(i, P);
    N -= len;
    len *= 2;
  }
  printf("%lld\n", ans);
  return 0;
}
