#include <bits/stdc++.h>
using namespace std;
int n, K;
int pover[64000];
int ipover[64000];
int dt[503][503];
int lsum[2][503][503];
const int mod = 1000000007;
int main() {
  scanf("%d%d", &n, &K);
  int maxval = 0;
  pover[0] = 1;
  for (int i = 1; i < 64000; i++) {
    pover[i] = (pover[i - 1] * (long long)2) % mod;
  }
  ipover[0] = 1;
  for (int i = 1; i < 64000; i++) {
    ipover[i] = (ipover[i - 1] * (long long)500000004) % mod;
  }
  for (int j = 0; j <= 0; j++) {
    dt[0][j] = 1;
  }
  for (int k = 0; k <= n; k++) {
    long long ksum = 0;
    for (int j = 0; j < k; j++) {
      long long mul = pover[(k - j) * (n - k + 1)];
      ksum = (ksum + dt[0][j] * mul) % mod;
      lsum[1][j][k] = ksum;
    }
  }
  for (int i = 1; i <= K; i++) {
    int ci = i % 2;
    for (int j = 1; j <= n; j++) {
      for (int k = 1; k <= j; k++) {
        long long baseCnt = lsum[ci][k - 1][j];
        long long tot = baseCnt * ipover[j - k + 1] % mod;
        dt[i][j] = (dt[i][j] + tot) % mod;
      }
    }
    int ni = 1 - i % 2;
    memset(lsum[ni], 0, sizeof(lsum[0]));
    for (int k = 0; k <= n; k++) {
      long long ksum = 0;
      for (int j = 0; j < k; j++) {
        long long mul = pover[(k - j) * (n - k + 1)];
        ksum = (ksum + dt[i][j] * mul) % mod;
        lsum[ni][j][k] = ksum;
      }
    }
  }
  long long ans = 0;
  for (int i = 0; i <= n; i++) {
    ans += dt[K][i];
    ans %= mod;
  }
  ans %= mod;
  printf("%d\n", (int)ans);
  return 0;
}
