#include <bits/stdc++.h>
using namespace std;
long long mem[111][111];
long long C(long long n, long long k) {
  if (n == k) return 1;
  if (k == 0) return 1;
  if (mem[n][k] != -1) return mem[n][k];
  return mem[n][k] = (C(n - 1, k) + C(n - 1, k - 1)) % 1000000007LL;
}
long long moP(long long x, long long n) {
  long long res = 1;
  while (n > 0) {
    if (n & 1) (res) = ((res) * (x) + 1000000007LL) % 1000000007LL;
    (x) = ((x) * (x) + 1000000007LL) % 1000000007LL;
    n >>= 1;
  }
  return res;
}
int main(void) {
  long long N, K;
  cin >> N >> K;
  memset(mem, -1, sizeof(mem));
  if (N <= K) {
    cout << C(N, K % N) << "\n";
  } else {
    long long i, j, k;
    long long dp[N + 5][K + 5];
    memset(dp, 0, sizeof(dp));
    dp[0][0] = 1;
    for (i = 1; i <= N; i++) {
      for (j = 0; j <= K; j++) {
        for (k = 0; k <= j; k++) {
          (dp[i][j]) =
              ((dp[i][j]) + (dp[i - 1][k]) + 1000000007LL) % 1000000007LL;
        }
      }
    }
    cout << dp[N][K] << "\n";
  }
}
