#include <bits/stdc++.h>
using namespace std;
struct Glass {
  double val = 0;
  Glass *glass1;
  Glass *glass2;
};
int main() {
  vector<vector<Glass> > glasses;
  vector<Glass> tempVec;
  Glass emptyGlass;
  Glass tempGlass;
  int N, T;
  cin >> N >> T;
  tempGlass.glass1 = &emptyGlass;
  tempGlass.glass2 = &emptyGlass;
  for (int i = 0; i < N; i++) {
    tempVec.push_back(tempGlass);
  }
  glasses.push_back(tempVec);
  tempVec.clear();
  for (int nCurr = N - 1; nCurr > 0; nCurr--) {
    for (int i = 0; i < nCurr; i++) {
      tempGlass.glass1 = &glasses[N - nCurr - 1][i];
      tempGlass.glass2 = &glasses[N - nCurr - 1][i + 1];
      tempVec.push_back(tempGlass);
    }
    glasses.push_back(tempVec);
    tempVec.clear();
  }
  int fullGlasses = 0;
  glasses.back().front().val += T;
  for (int g = N - 1; g >= 0; g--) {
    for (int v = 0; v < glasses[g].size(); v++) {
      if (glasses[g][v].val >= 1.0) {
        glasses[g][v].glass1->val += (glasses[g][v].val - 1.0) / 2.0;
        glasses[g][v].glass2->val += (glasses[g][v].val - 1.0) / 2.0;
        fullGlasses++;
      }
    }
  }
  cout << fullGlasses << endl;
}
