#include <bits/stdc++.h>
using namespace std;
int const N = 500 + 10, M = 500 + 10;
long long const mod = 1e9 + 7;
int n, m;
long long pow2[N];
long long dp[2][M][N];
int main() {
  scanf("%d%d", &n, &m);
  pow2[0] = 1;
  for (int i = 1; i <= n; ++i) {
    pow2[i] = pow2[i - 1] * 2 % mod;
  }
  dp[1][0][0] = 1;
  for (int i = 1; i <= n; ++i) {
    int curr = i & 1;
    int next = curr ^ 1;
    for (int j = 0; j <= m; ++j) {
      for (int k = 0; k <= n && k <= i; ++k)
        if (dp[curr][j][k]) {
          (dp[next][j][k] += dp[curr][j][k] * pow2[k] % mod) %= mod;
          (dp[next][j + 1][i] += dp[curr][j][k] * (pow2[i - k] + mod - 1) %
                                 mod * pow2[k] % mod) %= mod;
          dp[curr][j][k] = 0;
        }
    }
  }
  long long ans = 0;
  for (int k = 0; k <= n; ++k) {
    (ans += dp[(n & 1) ^ 1][m][k]) %= mod;
  }
  cout << ans << endl;
  return 0;
}
