#include <bits/stdc++.h>
using namespace std;
const int inf = 999999999;
const int mod = 1000000007;
inline int Getint() {
  char ch = getchar();
  while (ch < '0' || ch > '9') ch = getchar();
  int ret = 0;
  while (ch >= '0' && ch <= '9') ret = ret * 10 + ch - '0', ch = getchar();
  return ret;
}
int f[2][510][510], mul[510];
int n, m;
inline void Check(int &x, int y) {
  x += y;
  if (x >= mod) x -= mod;
}
int main() {
  mul[0] = 1;
  for (int i = 1; i <= 500; i++) {
    mul[i] = mul[i - 1];
    Check(mul[i], mul[i - 1]);
  }
  scanf("%d%d", &n, &m);
  if (!m) {
    printf("1\n");
    return 0;
  }
  int cur = 0, next = 1;
  for (int i = 0; i < n; i++) {
    memset(f[next], 0, sizeof(f[next]));
    Check(f[next][1][i], mul[i + 1] - 1);
    for (int j = 1; j <= i; j++)
      for (int k = 0; k < i; k++) {
        Check(f[next][j + 1][i], (long long)f[cur][j][k] * (mul[i - k] - 1) %
                                     mod * mul[k + 1] % mod);
        Check(f[next][j][k], (long long)f[cur][j][k] * mul[k + 1] % mod);
      }
    cur = 1 - cur, next = 1 - next;
  }
  int ans = 0;
  for (int i = 0; i <= n; i++) {
    Check(ans, f[cur][m][i]);
  }
  printf("%d\n", ans);
  return 0;
}
