#include <bits/stdc++.h>
using namespace std;
mt19937_64 rng(
    (unsigned)chrono::system_clock::now().time_since_epoch().count());
const long long int mod = 1e9 + 7;
;
const long double PI = acosl(-1);
const int nmax = 510;
long long int dp[2][nmax][nmax];
long long int two[nmax];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  two[0] = 1;
  for (int i = 1; i < nmax; i++) {
    two[i] = 2 * two[i - 1] % mod;
  }
  int n, k;
  cin >> n >> k;
  dp[0][0][0] = 1;
  int cur = 0;
  for (int pos = 1; pos <= n; pos++) {
    for (int cnt = 0; cnt <= k; cnt++)
      for (int r = 0; r <= pos; r++) {
        dp[cur ^ 1][cnt][r] = 0;
      }
    for (int cnt = 0; cnt <= k; cnt++) {
      for (int r = 0; r <= pos - 1; r++) {
        dp[cur ^ 1][cnt][r] += two[r] * dp[cur][cnt][r];
        dp[cur ^ 1][cnt][r] %= mod;
        dp[cur ^ 1][cnt + 1][pos] += (two[pos] - two[r]) * dp[cur][cnt][r];
        dp[cur ^ 1][cnt + 1][pos] %= mod;
        if (dp[cur ^ 1][cnt + 1][pos] < 0) dp[cur ^ 1][cnt + 1][pos] += mod;
      }
    }
    cur ^= 1;
  }
  long long int ans = 0;
  for (int r = 0; r <= n; r++) {
    ans = (ans + dp[cur][k][r]) % mod;
  }
  cout << ans << endl;
  return 0;
}
