#include <bits/stdc++.h>
using namespace std;
namespace my_std {
bool ccc(long long a, long long b) { return a > b; }
long long my_pow(long long a, long long b, long long mod) {
  long long res = 1;
  if (!b) return 1;
  while (b) {
    if (b & 1) res = (res * a) % mod;
    a = (a * a) % mod;
    b >>= 1;
  }
  return res;
}
long long qpow(long long a, long long b) {
  long long res = 1;
  if (!b) return 1;
  while (b) {
    if (b & 1) res *= a;
    a *= a;
    b >>= 1;
  }
  return res;
}
inline long long read() {
  long long sum = 0, f = 1;
  char ch = 0;
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    sum = sum * 10 + (ch ^ 48);
    ch = getchar();
  }
  return sum * f;
}
inline void write(long long x) {
  if (x < 0) {
    x = -x;
    putchar('-');
  }
  if (x > 9) write(x / 10);
  putchar(x % 10 + '0');
}
inline void writeln(long long x) {
  write(x);
  putchar('\n');
}
inline void writesp(long long x) {
  write(x);
  putchar(' ');
}
}  // namespace my_std
using namespace my_std;
long long n, h, f[36][36];
int main() {
  n = read();
  h = read();
  for (register long long i = (0); i <= (n); i++) f[0][i] = 1;
  for (register long long i = (1); i <= (n); i++)
    for (register long long j = (1); j <= (n); j++)
      for (register long long k = (0); k <= (j - 1); k++)
        f[j][i] += f[k][i - 1] * f[j - k - 1][i - 1];
  write(f[n][n] - f[n][h - 1]);
}
