#include <bits/stdc++.h>
template <class _, class __>
bool checkmax(_ &a, __ b) {
  return a < b ? a = b, true : false;
}
template <class _, class __>
bool checkmin(_ &a, __ b) {
  return a > b ? a = b, true : false;
}
using namespace std;
long long dp[55][55];
int main() {
  dp[0][0] = 1;
  for (int n = (1), n_end_ = (55); n < n_end_; ++n) {
    for (int h = (1), h_end_ = (55); h < h_end_; ++h) {
      for (int m = (1), m_end_ = (n); m <= m_end_; ++m) {
        long long sum = 0;
        for (int i = (0), i_end_ = (h - 1); i <= i_end_; ++i)
          sum += dp[n - m][i];
        dp[n][h] += dp[m - 1][h - 1] * sum;
        sum = 0;
        for (int i = (0), i_end_ = (h - 2); i <= i_end_; ++i)
          sum += dp[m - 1][i];
        dp[n][h] += dp[n - m][h - 1] * sum;
      }
    }
  }
  long long ans = 0;
  int n, h;
  cin >> n >> h;
  for (int i = (h), i_end_ = (n); i <= i_end_; ++i) ans += dp[n][i];
  cout << ans << endl;
  return EXIT_SUCCESS;
}
