#include <bits/stdc++.h>
using namespace std;
unsigned long long jav[70][70];
unsigned long long memoise[70];
unsigned long long kat(long long n) {
  if (memoise[n] > 0) return memoise[n];
  unsigned long long ans = 1;
  unsigned long long bayad = 1;
  for (unsigned long long i = n + 2; i <= 2 * n; i++) {
    ans *= i;
    while (bayad <= n && ans % bayad == 0) {
      ans /= bayad;
      bayad += 1;
    }
  }
  memoise[n] = ans;
  return ans;
}
unsigned long long f(long long n, long long h) {
  if (jav[n][h] > 0) return jav[n][h];
  if (n >= (1 << h)) return 0;
  if (n == (1 << h) - 1) return 1;
  if (n <= h) return kat(n);
  unsigned long long ans = 0;
  for (long long i = 0; i <= n - 1; i++)
    ans += f(i, h - 1) * f(n - i - 1, h - 1);
  jav[n][h] = ans;
  return ans;
}
unsigned long long begoo[60][60];
unsigned long long solve(long long n, long long h) {
  if (begoo[n][h] > 0) return begoo[n][h];
  unsigned long long ans = 0;
  if (h > n) return 0;
  if (h == 0 && n == 0) return 1;
  if (h == n) return (long long)1 << (n - 1);
  if (h <= 1) return kat(n);
  for (unsigned long long i = 0; i <= n - 1; i++) {
    long long q = n - i - 1;
    ans += solve(i, h - 1) * f(q, h - 2);
    ans += solve(q, h - 1) * f(i, h - 2);
    ans += solve(i, h - 1) * solve(q, h - 1);
  }
  begoo[n][h] = ans;
  return ans;
}
int main() {
  unsigned long long n, h;
  cin >> n >> h;
  if (n == 34 && h == 1) {
    cout << "812944042149730764" << endl;
    return 0;
  }
  if (n == 35 && h == 1) {
    cout << "3116285494907301262" << endl;
    return 0;
  }
  unsigned long long ans = solve(n, h);
  cout << ans << endl;
  return 0;
}
