#include <bits/stdc++.h>
template <typename Arg1>
void ZZ(const char* name, Arg1&& arg1) {
  std::cout << name << " = " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void ZZ(const char* names, Arg1&& arg1, Args&&... args) {
  const char* comma = strchr(names + 1, ',');
  std::cout.write(names, comma - names) << " = " << arg1;
  ZZ(comma, args...);
}
using namespace std;
unsigned long long dp[40][40];
bool vis[40][40];
unsigned long long f(unsigned long long nodes, unsigned long long hght) {
  if (nodes > 0 && hght == 0) return 0;
  if (nodes == 0 && hght > 0) return 0;
  if (nodes == 0 && hght == 0) return 1;
  if (vis[nodes][hght] == 1) return dp[nodes][hght];
  vis[nodes][hght] = 1;
  unsigned long long sm = 0;
  unsigned long long i, j;
  for (i = 1; i <= nodes; i++) {
    unsigned long long sm1 = 0, sm2 = 0;
    for (j = 0; j < (long long int)hght - 1; j++) sm1 += f(nodes - i, j);
    for (j = 0; j < (long long int)hght - 1; j++) sm2 += f(i - 1, j);
    sm += (f(i - 1, hght - 1) * sm1 + f(nodes - i, hght - 1) * sm2 +
           f(i - 1, hght - 1) * f(nodes - i, hght - 1));
  }
  return dp[nodes][hght] = sm;
}
int main() {
  ios::sync_with_stdio(false);
  unsigned long long n, h;
  cin >> n >> h;
  unsigned long long ans = 0;
  unsigned long long i;
  for (i = h; i <= n; i++) ans += f(n, i);
  cout << ans << "\n";
  return 0;
}
