#include <bits/stdc++.h>
using namespace std;
const int Mod = 1000000007;
const int MaxN = 505;
int N, K, dp[MaxN][MaxN], pow2[MaxN * MaxN];
void init(void) {
  scanf("%d %d", &N, &K);
  pow2[0] = 1;
  for (int i = 1; i <= 500 * 500; ++i) pow2[i] = pow2[i - 1] * 2 % Mod;
}
void solve(void) {
  int res = 0;
  dp[0][0] = 1;
  for (int i = 0; i <= N; ++i) {
    for (int k = 0; k < K; ++k)
      if (dp[i][k])
        for (int j = i + 1; j <= N; ++j)
          dp[j][k + 1] = (dp[j][k + 1] + (long long)dp[i][k] *
                                             ((long long)(pow2[j - i] - 1) *
                                              pow2[i * (j - i)] % Mod) %
                                             Mod) %
                         Mod;
    long long tmp = (long long)dp[i][K] * pow2[i * (N - i)] % Mod;
    res = (res + tmp) % Mod;
  }
  printf("%d\n", res);
}
int main(void) {
  init();
  solve();
  return 0;
}
