#include <bits/stdc++.h>
using namespace std;
long long N, K, dp[501][501];
long long p2[501];
void pre() {
  long long i;
  p2[0] = 1;
  for (i = 1; i < 501; ++i) p2[i] = (p2[i - 1] * 2) % 1000000007;
}
long long rec(long long maxinc, long long cur) {
  if (maxinc > K) return 0;
  if (cur > N) return (maxinc == K);
  long long last = cur - 1;
  long long &ret = dp[maxinc][cur];
  if (ret != -1) return ret;
  long long temp, mul = 1;
  ret = 0;
  long long cc = cur;
  for (; cur <= N; ++cur) {
    mul = (mul * p2[last]) % 1000000007;
    temp = (rec(maxinc + 1, cur + 1) * (p2[cur - last] - 1)) % 1000000007;
    ret = (ret + (temp * mul) % 1000000007) % 1000000007;
  }
  if (maxinc == K) ret = (ret + mul) % 1000000007;
  return ret;
}
int main() {
  pre();
  while (scanf("%I64d %I64d", &N, &K) != EOF) {
    memset(dp, -1, sizeof(dp));
    printf("%I64d\n", rec(0, 1));
  }
  return 0;
}
