#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
const int MAXN = 501;
long long F[MAXN];
void precal() {
  F[0] = 1;
  for (int i = 1; i < MAXN; i++) F[i] = (F[i - 1] * 2) % MOD;
}
int N, K;
long long dp[2][MAXN][MAXN];
int main() {
  precal();
  cin >> N >> K;
  dp[0][0][0] = 1;
  for (int cur = 0; cur < N; cur++) {
    int flag = cur % 2;
    memset(dp[!flag], 0, sizeof(dp[!flag]));
    for (int last = 0; last <= cur; last++) {
      for (int k = 0; k <= min(cur, K); k++) {
        dp[!flag][last][k] += dp[flag][last][k];
        dp[!flag][last][k] += (dp[flag][last][k] * (F[last] - 1)) % MOD;
        ;
        dp[!flag][last][k] %= MOD;
        if (k < K) {
          long long ret = (dp[flag][last][k] * F[last]) % MOD;
          ret = (ret * (F[cur + 1 - last] - 1)) % MOD;
          dp[!flag][cur + 1][k + 1] += ret;
          dp[!flag][cur + 1][k + 1] %= MOD;
        }
      }
    }
  }
  long long ret = 0;
  for (int last = 0; last <= N; last++) {
    ret += dp[N % 2][last][K];
  }
  ret = (ret % MOD + MOD) % MOD;
  cout << ret << endl;
  return 0;
}
