#include <bits/stdc++.h>
using namespace std;
int n, m, dp[501][501], b[501 * 501];
bool visit[501][501];
int dfs(int n, int m) {
  long long ans = 0;
  if (visit[n][m]) return dp[n][m];
  for (int i = m - 1; i < n; i++)
    ans += (long long)dfs(i, m - 1) * (b[n - i] - 1) % 1000000007 *
           b[(n - i) * i] % 1000000007,
        ans %= 1000000007;
  visit[n][m] = 1, dp[n][m] = ans;
  return dp[n][m];
}
int main() {
  scanf("%d %d", &n, &m), b[0] = 1;
  for (int i = 0; i <= n; i++) dp[i][0] = 1, visit[i][0] = 1;
  for (int i = 1; i <= n * n; i++)
    b[i] = ((long long)b[i - 1] << 1) % 1000000007;
  printf("%d\n", dfs(n, m));
  return 0;
}
