#include <bits/stdc++.h>
using namespace std;
const int maxn = 520;
const int MOd = 1e9 + 7;
int a, K;
int dn[maxn][maxn];
int us[maxn * maxn];
int main() {
  scanf("%d %d", &a, &K);
  us[0] = 1;
  for (int i = 1; i <= a * a; i++) us[i] = us[i - 1] * 2 % MOd;
  dn[0][0] = 1;
  int t;
  for (int i = 1; i <= a; i++)
    for (int j = 0; j < i; j++) {
      t = us[(i - j - 1) * j];
      t = (long long)t * (us[i] - us[j] + MOd) % MOd;
      for (int k = 1; k <= K; k++) {
        dn[i][k] += (long long)t * dn[j][k - 1] % MOd;
        if (dn[i][k] >= MOd) dn[i][k] -= MOd;
      }
    }
  long long ans = 0;
  for (int i = 0; i <= a; i++)
    ans = (ans + (long long)dn[i][K] * us[(a - i) * i]) % MOd;
  cout << ans << endl;
  return 0;
}
