#include <bits/stdc++.h>
using namespace std;
const int maxN = 500 + 5;
const int mod = 1000 * 1000 * 1000 + 7;
int dp[maxN][maxN];
int pw[maxN * maxN];
int main() {
  ios::sync_with_stdio(0);
  cin.tie();
  int n, k;
  cin >> n >> k;
  dp[0][0] = 1;
  pw[0] = 1;
  for (int i = 1; i < maxN * maxN; i++) pw[i] = pw[i - 1] * 2 % mod;
  for (int i = 1; i < n + 1; i++)
    for (int j = 1; j < min(k + 1, i + 1); j++) {
      for (int k = 0; k < i; k++) {
        int res = dp[k][j - 1];
        int tmp = pw[i - k] % mod;
        tmp += mod - 1;
        tmp %= mod;
        res = (1LL) * res * tmp % mod;
        tmp = pw[(i - k) * k];
        res = (1LL) * res * tmp % mod;
        dp[i][j] = (dp[i][j] + res) % mod;
      }
    }
  int ans = 0;
  for (int i = 0; i < n + 1; i++) {
    int res = (1LL) * dp[i][k] * pw[(n - i) * i] % mod;
    ans = (ans + res) % mod;
  }
  cout << ans << endl;
  return 0;
}
