import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int m = s.nextInt(), n = s.nextInt();
System.out.println(new Main().numTrees(m, n));
}
long[][][] dp;
public long numTrees(int n, int h) {
dp = new long[n + 1][n + 1][h + 1];
for (int i = 1; i < n + 1; i++) {
for (int j = 1; j < n + 1; j++) {
if (i >= j) {
dp[i][j][0] = 0;
for (int k = 1; k <= h; k++) {
dp[i][j][k] = 1;
}
} else {
Arrays.fill(dp[i][j], -1);
dp[i][j][0] = 0;
}
}
}
return dfs(1, n, n, h);
}
public long dfs(int i, int j, int n, int h) {
long e = (long) (1e9 + 7);
if (h <= 0) {
return 0;
}
if (i > j) {
return 1;
}
if (dp[i][j][h] != -1) {
return dp[i][j][h];
}
long cnt = 0;
for (int t = i; t <= j; t++) {
long leftCnt = dfs(i, t - 1, n, h - 1) % e;
long rightCnt = dfs(t + 1, j, n, h - 1) % e;
cnt = (cnt + leftCnt * rightCnt % e) % e;
}
dp[i][j][h] = cnt;
return dp[i][j][h];
}
}