#include <bits/stdc++.h>
using namespace std;
const long long inf64 = 0x3f3f3f3f3f3f3f3fLL;
const double eps = 1e-6;
const int maxn = 37;
long long a[maxn][maxn];
long long go(int n, int h) {
  if (h < 0) return 0;
  if (a[n][h] >= 0) return a[n][h];
  a[n][h] = 0;
  if (n && !h) return 0;
  for (int i = 1; i < n - 1; i++) {
    long long leftless = 0;
    long long leftmore = 0;
    long long rightless = 0;
    long long rightmore = 0;
    for (int j = 0; j < n && j < h - 1; j++) {
      leftless += go(i, j);
      rightless += go(n - (i + 1), j);
    }
    for (int j = h - 1; j < h && j < n; j++) {
      leftmore += go(i, j);
      rightmore += go(n - (i + 1), j);
    }
    a[n][h] +=
        leftmore * rightless + leftless * rightmore + leftmore * rightmore;
  }
  {
    for (int j = h - 1; j < n && j < h; j++) {
      a[n][h] += 2 * go(n - 1, j);
    }
  }
  return a[n][h];
}
int main() {
  int n, h;
  scanf("%d%d", &n, &h);
  memset(a, -1, sizeof(a));
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= n; j++)
      if (i == 0 && j == 0)
        a[i][j] = 1;
      else if (i == 1 && j == 1)
        a[i][j] = 1;
      else if (j == 1)
        a[i][j] = 0;
      else if (i == 0)
        a[i][j] = 0;
  long long res = 0;
  for (int i = h; i <= n; i++) res += go(n, i);
  cout << res << endl;
  return 0;
}
