#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3fffffff;
const int SINF = 0x7fffffff;
const long long LINF = 0x3fffffffffffffff;
const long long SLINF = 0x7fffffffffffffff;
const int MAXN = 507;
const int MOD = 1e9 + 7;
int n, k;
int dp[MAXN][MAXN];
int p2[MAXN * MAXN];
void init();
void input();
void work();
void addv(int &x, int y) {
  x += y;
  if (x >= MOD) x -= MOD;
}
int main() {
  init();
  input();
  work();
}
void init() {
  ios::sync_with_stdio(false);
  p2[0] = 1;
  for (int i = 1; i < MAXN * MAXN; ++i) p2[i] = (p2[i - 1] << 1) % MOD;
}
void input() { cin >> n >> k; }
void work() {
  dp[0][0] = 1;
  long long tmp;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j <= i; ++j) {
      tmp = 1;
      for (int k = i + 1; k <= n; ++k) {
        (tmp *= p2[i]) %= MOD;
        addv(dp[k][j + 1],
             (((tmp * dp[i][j]) % MOD * (p2[k - i] - 1 + MOD)) % MOD));
      }
    }
  }
  long long ans = 0;
  tmp = 1;
  for (int i = n; i >= 0; --i) {
    (ans += static_cast<long long>(p2[i * (n - i)]) * dp[i][k]) %= MOD;
  }
  cout << ans << endl;
}
