#include <bits/stdc++.h>
using namespace std;
int mod = 1e9 + 7;
int n, k1;
long long pw[100100];
int f(int i, int pr, int k) {
  if (i > n) {
    return k == 0;
  }
  int r = pr;
  int r1 = i - pr;
  long long res = 0;
  if (k > 0) res = (pw[r1] - 1) * f(i + 1, i, k - 1);
  res %= mod;
  res += f(i + 1, pr, k);
  if (res >= mod) res -= mod;
  res *= pw[r];
  res %= mod;
  return res;
}
long long dp[2][505][505];
int f1() {
  bool b = 0;
  for (int i = 0; i <= n; i++) {
    dp[b][i][0] = 1;
  }
  for (int i = n; i >= 1; i--) {
    b = !b;
    for (int pr = i - 1; pr >= 0; pr--) {
      for (int k = k1; k >= 0; k--) {
        int r = pr;
        int r1 = i - pr;
        long long res = 0;
        if (k > 0) res = (pw[r1] - 1) * dp[!b][i][k - 1];
        res %= mod;
        res += dp[!b][pr][k];
        if (res >= mod) res -= mod;
        res *= pw[r];
        res %= mod;
        dp[b][pr][k] = res;
      }
    }
  }
  return dp[b][0][k1];
}
int main() {
  pw[0] = 1;
  for (int i = 1; i < 10010; i++) {
    pw[i] = pw[i - 1] * 2;
    pw[i] %= mod;
  }
  cin >> n >> k1;
  cout << f1() << endl;
  return 0;
}
