#include <bits/stdc++.h>
using namespace std;
const int Mod = 1e9 + 7;
const int N = 1011;
const int Max = N * N + N;
int dp[N][N], p[Max];
int main() {
  int n, seg;
  cin >> n >> seg;
  p[0] = 1;
  for (int i = 1; i < Max; i++) p[i] = 2LL * p[i - 1] % Mod;
  fill(dp[0], dp[0] + N, 1);
  for (int i = 1; i <= seg; i++)
    for (int j = 0; j < n; j++)
      for (int k = j; k < n; k++) {
        int x = (n - 1 - k) * (k - j + 1);
        dp[i][j] = (dp[i][j] + 1LL * (p[x + k - j + 1] - p[x] + Mod) % Mod *
                                   dp[i - 1][k + 1] % Mod) %
                   Mod;
      }
  cout << dp[seg][0] << endl;
}
