#include <bits/stdc++.h>
using namespace std;
const int maxn = 505;
const int mod = 1000000007;
int mult(int x, int y) { return (long long)x * y % mod; }
int add(int x, int y) { return (x + y) % mod; }
int sub(int x, int y) {
  x -= y;
  if (x < 0) x += mod;
  return x;
}
int n, k, sol;
int powr[maxn * maxn], dp[maxn][maxn];
int main(void) {
  cin >> n >> k;
  powr[0] = 1;
  for (int i = 1; i < maxn * maxn; i++) powr[i] = mult(powr[i - 1], 2);
  dp[0][0] = 1;
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= k; j++) {
      if (j == k) sol = add(sol, mult(dp[i][j], powr[(n - i) * i]));
      for (int l = i + 1; l <= n; l++)
        dp[l][j + 1] = add(
            dp[l][j + 1],
            mult(dp[i][j], mult(sub(powr[l], powr[i]), powr[(l - i - 1) * i])));
    }
  cout << sol << endl;
  return 0;
}
