#include <bits/stdc++.h>
using namespace std;
unsigned long long higher[36][36];
unsigned long long Higher(int height, int num) {
  if (higher[height][num] != -1) return higher[height][num];
  if (num < height) return 0;
  if (num <= 1) return 1;
  unsigned long long rslt{0};
  for (int i = 1; i <= num; ++i) {
    int new_height = max(height - 1, 0);
    unsigned long long lh = Higher(new_height, i - 1);
    unsigned long long rh = Higher(new_height, num - i);
    rslt += (lh * Higher(0, num - i) + rh * Higher(0, i - 1) - lh * rh);
  }
  higher[height][num] = rslt;
  return rslt;
}
int main() {
  int num_nodes, height;
  cin >> num_nodes >> height;
  for (int i = 0; i < 36; ++i) {
    for (int j = 0; j < 36; ++j) {
      higher[i][j] = -1;
    }
  }
  cout << Higher(height, num_nodes) << endl;
  return 0;
}
