#include <bits/stdc++.h>
using namespace std;
const int mo = 1e9 + 7;
int n, K;
int t[1000010];
int F[1010][1010];
int mul(int x, int y) { return (long long)x * y % mo; }
void inc(int &x, int y) {
  x += y;
  while (x >= mo) x -= mo;
}
int dfs(int n, int k) {
  if (n < k) return 0;
  if (!k) return 1;
  if (~F[n][k]) return F[n][k];
  F[n][k] = 0;
  for (int i = 1; i <= n; i++)
    inc(F[n][k], mul(dfs(n - i, k - 1), mul(t[i] - 1, t[(n - i) * i])));
  return F[n][k];
}
int main() {
  scanf("%d %d", &n, &K);
  t[0] = 1;
  for (int i = 1; i <= n * n; i++) t[i] = (t[i - 1] << 1) % mo;
  memset(F, -1, sizeof(F));
  printf("%d", dfs(n, K));
  return 0;
}
