n, k = list(map(int, input().split()))

max_len = 2 * n - 1  # 適宜変更する
mod = 10**9 + 7


def modinv(x):
    '''
    xの逆元を求める。フェルマーの小定理より、 x の逆元は x ^ (mod - 2) に等しい。計算時間はO(log(mod))程度。
    Python標準のpowは割った余りを出すことも可能。
    '''
    return pow(x, mod-2, mod)


# 二項係数の左側の数字の最大値を max_len　とする。nとかだと他の変数と被りそうなので。
# factori_table = [1, 1, 2, 6, 24, 120, ...] 要は factori_table[n] = n!
# 計算時間はO(max_len * log(mod))
modinv_table = [-1] * (max_len + 1)
modinv_table[0] = None  # 万が一使っていたときにできるだけ早期に原因特定できるようにしたいので、Noneにしておく。
factori_table = [1] * (max_len + 1)
factori_inv_table = [1] * (max_len + 1)
for i in range(1, max_len + 1):
    factori_table[i] = factori_table[i-1] * (i) % mod

modinv_table[1] = 1

for i in range(2, max_len + 1):
    modinv_table[i] = (-modinv_table[mod % i] * (mod // i)) % mod
    factori_inv_table[i] = factori_inv_table[i-1] * modinv_table[i] % mod


def binomial_coefficients(n, k):
    '''
    n! / (k! * (n-k)! )
    0 <= k <= nを満たさないときは変な値を返してしまうので、先にNoneを返すことにする。
    場合によっては0のほうが適切かもしれない。
    '''
    if not 0 <= k <= n:
        return None
    return (factori_table[n] * factori_inv_table[k] * factori_inv_table[n-k]) % mod


def binomial_coefficients2(n, k):
    '''
    (n * (n-1) * ... * (n-k+1)) / (1 * 2 * ... * k)
    '''
    ans = 1
    for i in range(k):
        ans *= n-i
        ans *= modinv_table[i + 1]
        ans %= mod
    return ans



if k >= n-1:
    # nHn = 2n-1 C n
    print(binomial_coefficients(2 * n - 1, n))
else:
    # 移動がk回←→ 人数0の部屋がk個以下
    # 人数0の部屋がちょうどj個のものは
    # nCj(人数0の部屋の選び方) * jH(n-j) (余剰のj人を残りの部屋に入れる)
    ans = 0
    for j in range(k+1):
        if j == 0:
            ans += 1
        else:
            ans += binomial_coefficients(n, j) * binomial_coefficients(n-1, j) 
            ans %= mod
    print(ans) n, k = list(map(int, input().split())) n list(map(int, input().split())) list map(int, input().split()) map int input().split() ().split () input split k max_len = 2 * n - 1 max_len 2 * n - 1 2 * n 2 n 1 mod = 10**9 + 7 mod 10**9 + 7 10**9 10 9 7 def modinv(x):
    '''
    xの逆元を求める。フェルマーの小定理より、 x の逆元は x ^ (mod - 2) に等しい。計算時間はO(log(mod))程度。
    Python標準のpowは割った余りを出すことも可能。
    '''
    return pow(x, mod-2, mod)


# 二項係数の左側の数字の最大値を max_len　とする。nとかだと他の変数と被りそうなので。
# factori_table = [1, 1, 2, 6, 24, 120, ...] 要は factori_table[n] = n!
# 計算時間はO(max_len * log(mod)) modinv '''
    xの逆元を求める。フェルマーの小定理より、 x の逆元は x ^ (mod - 2) に等しい。計算時間はO(log(mod))程度。
    Python標準のpowは割った余りを出すことも可能。
    ''' return pow(x, mod-2, mod) pow(x, mod-2, mod) pow x mod-2 mod 2 mod x x modinv_table = [-1] * (max_len + 1) modinv_table [-1] * (max_len + 1) [-1] -1 max_len + 1 max_len 1 modinv_table[0] = None modinv_table[0] modinv_table 0 None factori_table = [1] * (max_len + 1) factori_table [1] * (max_len + 1) [1] 1 max_len + 1 max_len 1 factori_inv_table = [1] * (max_len + 1) factori_inv_table [1] * (max_len + 1) [1] 1 max_len + 1 max_len 1 for i in range(1, max_len + 1):
    factori_table[i] = factori_table[i-1] * (i) % mod i range(1, max_len + 1) range 1 max_len + 1 max_len 1 factori_table[i] = factori_table[i-1] * (i) % mod factori_table[i] factori_table i factori_table[i-1] * (i) % mod factori_table[i-1] * (i) factori_table[i-1] factori_table i-1 i 1 i mod modinv_table[1] = 1 modinv_table[1] modinv_table 1 1 for i in range(2, max_len + 1):
    modinv_table[i] = (-modinv_table[mod % i] * (mod // i)) % mod
    factori_inv_table[i] = factori_inv_table[i-1] * modinv_table[i] % mod i range(2, max_len + 1) range 2 max_len + 1 max_len 1 modinv_table[i] = (-modinv_table[mod % i] * (mod // i)) % mod modinv_table[i] modinv_table i (-modinv_table[mod % i] * (mod // i)) % mod -modinv_table[mod % i] * (mod // i) -modinv_table[mod % i] modinv_table[mod % i] modinv_table mod % i mod i mod // i mod i mod factori_inv_table[i] = factori_inv_table[i-1] * modinv_table[i] % mod factori_inv_table[i] factori_inv_table i factori_inv_table[i-1] * modinv_table[i] % mod factori_inv_table[i-1] * modinv_table[i] factori_inv_table[i-1] factori_inv_table i-1 i 1 modinv_table[i] modinv_table i mod def binomial_coefficients(n, k):
    '''
    n! / (k! * (n-k)! )
    0 <= k <= nを満たさないときは変な値を返してしまうので、先にNoneを返すことにする。
    場合によっては0のほうが適切かもしれない。
    '''
    if not 0 <= k <= n:
        return None
    return (factori_table[n] * factori_inv_table[k] * factori_inv_table[n-k]) % mod binomial_coefficients '''
    n! / (k! * (n-k)! )
    0 <= k <= nを満たさないときは変な値を返してしまうので、先にNoneを返すことにする。
    場合によっては0のほうが適切かもしれない。
    ''' if not 0 <= k <= n:
        return None
     not 0 <= k <= n 0 <= k <= n 0 <= k 0 k n return None None return (factori_table[n] * factori_inv_table[k] * factori_inv_table[n-k]) % mod (factori_table[n] * factori_inv_table[k] * factori_inv_table[n-k]) % mod factori_table[n] * factori_inv_table[k] * factori_inv_table[n-k] factori_table[n] * factori_inv_table[k] factori_table[n] factori_table n factori_inv_table[k] factori_inv_table k factori_inv_table[n-k] factori_inv_table n-k n k mod n n k k def binomial_coefficients2(n, k):
    '''
    (n * (n-1) * ... * (n-k+1)) / (1 * 2 * ... * k)
    '''
    ans = 1
    for i in range(k):
        ans *= n-i
        ans *= modinv_table[i + 1]
        ans %= mod
    return ans binomial_coefficients2 '''
    (n * (n-1) * ... * (n-k+1)) / (1 * 2 * ... * k)
    ''' ans = 1 ans 1 for i in range(k):
        ans *= n-i
        ans *= modinv_table[i + 1]
        ans %= mod
     i range(k) range k ans *= n-i ans n-i n i ans *= modinv_table[i + 1] ans modinv_table[i + 1] modinv_table i + 1 i 1 ans %= mod ans mod return ans ans n n k k if k >= n-1:
    # nHn = 2n-1 C n
    print(binomial_coefficients(2 * n - 1, n))
else:
    # 移動がk回←→ 人数0の部屋がk個以下
    # 人数0の部屋がちょうどj個のものは
    # nCj(人数0の部屋の選び方) * jH(n-j) (余剰のj人を残りの部屋に入れる)
    ans = 0
    for j in range(k+1):
        if j == 0:
            ans += 1
        else:
            ans += binomial_coefficients(n, j) * binomial_coefficients(n-1, j) 
            ans %= mod
    print(ans) k >= n-1 k n-1 n 1 print(binomial_coefficients(2 * n - 1, n)) print binomial_coefficients(2 * n - 1, n) binomial_coefficients 2 * n - 1 2 * n 2 n 1 n ans = 0 ans 0 for j in range(k+1):
        if j == 0:
            ans += 1
        else:
            ans += binomial_coefficients(n, j) * binomial_coefficients(n-1, j) 
            ans %= mod
     j range(k+1) range k+1 k 1 if j == 0:
            ans += 1
        else:
            ans += binomial_coefficients(n, j) * binomial_coefficients(n-1, j) 
            ans %= mod
     j == 0 j 0 ans += 1 ans 1 ans += binomial_coefficients(n, j) * binomial_coefficients(n-1, j) ans binomial_coefficients(n, j) * binomial_coefficients(n-1, j) binomial_coefficients(n, j) binomial_coefficients n j binomial_coefficients(n-1, j) binomial_coefficients n-1 n 1 j ans %= mod ans mod print(ans) print ans n, k = list(map(int, input().split())) list(map(int, input().split())) n modinv_table = [-1] * (max_len + 1) [-1] * (max_len + 1) modinv_table factori_table = [1] * (max_len + 1) [1] * (max_len + 1) factori_table ans += binomial_coefficients(n, j) * binomial_coefficients(n-1, j) binomial_coefficients(n, j) * binomial_coefficients(n-1, j) ans ans %= mod mod ans ans += 1 1 ans max_len = 2 * n - 1 2 * n - 1 max_len def modinv(x):
    '''
    xの逆元を求める。フェルマーの小定理より、 x の逆元は x ^ (mod - 2) に等しい。計算時間はO(log(mod))程度。
    Python標準のpowは割った余りを出すことも可能。
    '''
    return pow(x, mod-2, mod)


# 二項係数の左側の数字の最大値を max_len　とする。nとかだと他の変数と被りそうなので。
# factori_table = [1, 1, 2, 6, 24, 120, ...] 要は factori_table[n] = n!
# 計算時間はO(max_len * log(mod)) def modinv(x):
    '''
    xの逆元を求める。フェルマーの小定理より、 x の逆元は x ^ (mod - 2) に等しい。計算時間はO(log(mod))程度。
    Python標準のpowは割った余りを出すことも可能。
    '''
    return pow(x, mod-2, mod)


# 二項係数の左側の数字の最大値を max_len　とする。nとかだと他の変数と被りそうなので。
# factori_table = [1, 1, 2, 6, 24, 120, ...] 要は factori_table[n] = n!
# 計算時間はO(max_len * log(mod)) modinv def binomial_coefficients2(n, k):
    '''
    (n * (n-1) * ... * (n-k+1)) / (1 * 2 * ... * k)
    '''
    ans = 1
    for i in range(k):
        ans *= n-i
        ans *= modinv_table[i + 1]
        ans %= mod
    return ans def binomial_coefficients2(n, k):
    '''
    (n * (n-1) * ... * (n-k+1)) / (1 * 2 * ... * k)
    '''
    ans = 1
    for i in range(k):
        ans *= n-i
        ans *= modinv_table[i + 1]
        ans %= mod
    return ans binomial_coefficients2 mod = 10**9 + 7 10**9 + 7 mod k = list(map(int, input().split())) list(map(int, input().split())) k factori_inv_table = [1] * (max_len + 1) [1] * (max_len + 1) factori_inv_table def binomial_coefficients(n, k):
    '''
    n! / (k! * (n-k)! )
    0 <= k <= nを満たさないときは変な値を返してしまうので、先にNoneを返すことにする。
    場合によっては0のほうが適切かもしれない。
    '''
    if not 0 <= k <= n:
        return None
    return (factori_table[n] * factori_inv_table[k] * factori_inv_table[n-k]) % mod def binomial_coefficients(n, k):
    '''
    n! / (k! * (n-k)! )
    0 <= k <= nを満たさないときは変な値を返してしまうので、先にNoneを返すことにする。
    場合によっては0のほうが適切かもしれない。
    '''
    if not 0 <= k <= n:
        return None
    return (factori_table[n] * factori_inv_table[k] * factori_inv_table[n-k]) % mod binomial_coefficients ans = 0 0 ans
n, k = list(map(int, input().split()))

max_len = 2 * n - 1  # 適宜変更する
mod = 10**9 + 7


def modinv(x):
    '''
    xの逆元を求める。フェルマーの小定理より、 x の逆元は x ^ (mod - 2) に等しい。計算時間はO(log(mod))程度。
    Python標準のpowは割った余りを出すことも可能。
    '''
    return pow(x, mod-2, mod)


# 二項係数の左側の数字の最大値を max_len　とする。nとかだと他の変数と被りそうなので。
# factori_table = [1, 1, 2, 6, 24, 120, ...] 要は factori_table[n] = n!
# 計算時間はO(max_len * log(mod))
modinv_table = [-1] * (max_len + 1)
modinv_table[0] = None  # 万が一使っていたときにできるだけ早期に原因特定できるようにしたいので、Noneにしておく。
factori_table = [1] * (max_len + 1)
factori_inv_table = [1] * (max_len + 1)
for i in range(1, max_len + 1):
    factori_table[i] = factori_table[i-1] * (i) % mod

modinv_table[1] = 1

for i in range(2, max_len + 1):
    modinv_table[i] = (-modinv_table[mod % i] * (mod // i)) % mod
    factori_inv_table[i] = factori_inv_table[i-1] * modinv_table[i] % mod


def binomial_coefficients(n, k):
    '''
    n! / (k! * (n-k)! )
    0 <= k <= nを満たさないときは変な値を返してしまうので、先にNoneを返すことにする。
    場合によっては0のほうが適切かもしれない。
    '''
    if not 0 <= k <= n:
        return None
    return (factori_table[n] * factori_inv_table[k] * factori_inv_table[n-k]) % mod


def binomial_coefficients2(n, k):
    '''
    (n * (n-1) * ... * (n-k+1)) / (1 * 2 * ... * k)
    '''
    ans = 1
    for i in range(k):
        ans *= n-i
        ans *= modinv_table[i + 1]
        ans %= mod
    return ans



if k >= n-1:
    # nHn = 2n-1 C n
    print(binomial_coefficients(2 * n - 1, n))
else:
    # 移動がk回←→ 人数0の部屋がk個以下
    # 人数0の部屋がちょうどj個のものは
    # nCj(人数0の部屋の選び方) * jH(n-j) (余剰のj人を残りの部屋に入れる)
    ans = 0
    for j in range(k+1):
        if j == 0:
            ans += 1
        else:
            ans += binomial_coefficients(n, j) * binomial_coefficients(n-1, j) 
            ans %= mod
    print(ans)
