#include <bits/stdc++.h>
using namespace std;
template <class T>
void pv(T a, T b) {
  for (T i = a; i != b; ++i) cout << *i << " ";
  cout << endl;
}
long long pd[510][510];
long long pw2[510 * 510];
long long md(long long a) {
  a %= 1000000007LL;
  if (a < 0) return (a + 1000000007LL) % 1000000007LL;
  return a;
}
int main() {
  int n, k;
  scanf("%d%d", &n, &k);
  pw2[0] = 1;
  for (int i = 1; i < 510 * 510; i++)
    pw2[i] = (pw2[i - 1] * 2LL) % 1000000007LL;
  long long rsp = 0;
  for (int i = 1; i < k + 1; i++) {
    for (int(j) = (0); (j) < (n); (j)++) {
      pd[i][j] = 0;
      if (i == 1) {
        pd[i][j] = md(pw2[j + 1] - 1);
      } else {
        for (int(z) = (0); (z) < (j); (z)++) {
          pd[i][j] = md(pd[i][j] + md(pd[i - 1][z] * (pw2[j - z] - 1)) *
                                       pw2[(j - z) * (z + 1)]);
        }
      }
      if (i == k) {
        rsp = md(rsp + md(pd[i][j] * pw2[(n - 1 - j) * (j + 1)]));
      }
    }
  }
  if (k == 0) rsp++;
  printf("%lld\n", rsp);
  return 0;
}
