#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
const int MAXN = 510;
int N, K;
long long p2[MAXN];
long long dp[2][MAXN][MAXN];
void init() {
  p2[0] = 1;
  for (int i = 1; i < MAXN; i++) p2[i] = (p2[i - 1] * 2) % MOD;
}
int main() {
  init();
  cin >> N >> K;
  if (K == 0) {
    cout << 1 << endl;
    return 0;
  }
  if (N == 1) {
    cout << (K == 1) << endl;
    return 0;
  }
  long long print = 0;
  for (int i = 0; i < N; i++) dp[N & 1][i][K] = 1;
  for (int at = N - 1; at >= 1; at--) {
    memset(dp[at & 1], 0, sizeof(dp[at & 1]));
    for (int prev = 0; prev < at; prev++) {
      for (int made = 1; made <= K; made++) {
        long long &ans = dp[at & 1][prev][made];
        if (made < K)
          ans = (ans + p2[prev + 1] * (p2[at - prev] - 1) % MOD *
                           dp[(at + 1) & 1][at][made + 1]) %
                MOD;
        ans = (ans + p2[prev + 1] * dp[(at + 1) & 1][prev][made]) % MOD;
      }
    }
    if (at == N - 1)
      print = (print + (p2[at + 1] - 1) * dp[(at + 1) & 1][at][1]) % MOD;
    print = (print + (p2[at] - 1) * dp[at & 1][at - 1][1]) % MOD;
  }
  cout << print << endl;
  return 0;
}
