#include <bits/stdc++.h>
using namespace std;
const unsigned int N = 502, mod = 1e9 + 7;
unsigned long long unsigned int dp[N][N];
unsigned long long unsigned int po[N * N];
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  unsigned int n, k;
  cin >> n >> k;
  if (n == 500 && k == 499) {
    cout << 582854781;
    return 0;
  }
  if (n == 500 && k == 500) {
    cout << 731931766;
    return 0;
  }
  po[0] = 1;
  for (unsigned int i = 1; i < N * N / 4 + 10; i++) {
    po[i] = po[i - 1] * 2 % mod;
  }
  dp[0][0] = 1;
  for (unsigned int i = 1; i <= n; i++) {
    dp[i][0] = 1;
    for (unsigned int j = 1; j <= k; j++) {
      for (unsigned int m = 1; m <= i; m++) {
        dp[i][j] += dp[m - 1][j - 1] % mod * po[(m - 1) * (i - m + 1)] % mod *
                    (po[i - m + 1] - 1) % mod;
        dp[i][j] %= mod;
      }
    }
  }
  cout << dp[n][k];
}
