# 逆元を利用した組み合わせの計算
#############################################################
def cmb(n, r, mod):
    if (r < 0 or r > n):
        return 0
    r = min(r, n - r)
    return g1[n] * g2[r] * g2[n - r] % mod

mod = 10**9 + 7
NN = 10**6

g1 = [1, 1]
g2 = [1, 1]
inverse = [0, 1]

for i in range(2, NN + 1):
    g1.append((g1[-1] * i) % mod)
    inverse.append((-inverse[mod % i] * (mod // i)) % mod)
    g2.append((g2[-1] * inverse[-1]) % mod)
#############################################################

N, K = map(int, input().split())

# M = 空き部屋数の最大値
M = min(N - 1, K)

"""
m = 0,1,2,...,M

N部屋から、空き部屋をm個選ぶ
-> N_C_m

残りの(N-m)部屋に、N人を配置する（空き部屋が出来てはいけない）
まず、(N-m)部屋に1人ずつ配置し、残ったm人を(N-m)部屋に配置する
これは、m個のボールと(N-m-1)本の仕切りの並び替えに相当する
-> (m+N-m-1)_C_m = N-1_C_m
"""

ans = 0
for m in range(0, M + 1):
    ans += cmb(N, m, mod) * cmb(N - 1, m, mod)
    ans %= mod

print(ans) def cmb(n, r, mod):
    if (r < 0 or r > n):
        return 0
    r = min(r, n - r)
    return g1[n] * g2[r] * g2[n - r] % mod cmb if (r < 0 or r > n):
        return 0
     r < 0 or r > n r < 0 r 0 r > n r n return 0 0 r = min(r, n - r) r min(r, n - r) min r n - r n r return g1[n] * g2[r] * g2[n - r] % mod g1[n] * g2[r] * g2[n - r] % mod g1[n] * g2[r] * g2[n - r] g1[n] * g2[r] g1[n] g1 n g2[r] g2 r g2[n - r] g2 n - r n r mod n n r r mod mod mod = 10**9 + 7 mod 10**9 + 7 10**9 10 9 7 NN = 10**6 NN 10**6 10 6 g1 = [1, 1] g1 [1, 1] 1 1 g2 = [1, 1] g2 [1, 1] 1 1 inverse = [0, 1] inverse [0, 1] 0 1 for i in range(2, NN + 1):
    g1.append((g1[-1] * i) % mod)
    inverse.append((-inverse[mod % i] * (mod // i)) % mod)
    g2.append((g2[-1] * inverse[-1]) % mod)
############################################################# i range(2, NN + 1) range 2 NN + 1 NN 1 g1.append((g1[-1] * i) % mod) g1.append g1 append (g1[-1] * i) % mod g1[-1] * i g1[-1] g1 -1 i mod inverse.append((-inverse[mod % i] * (mod // i)) % mod) inverse.append inverse append (-inverse[mod % i] * (mod // i)) % mod -inverse[mod % i] * (mod // i) -inverse[mod % i] inverse[mod % i] inverse mod % i mod i mod // i mod i mod g2.append((g2[-1] * inverse[-1]) % mod) g2.append g2 append (g2[-1] * inverse[-1]) % mod g2[-1] * inverse[-1] g2[-1] g2 -1 inverse[-1] inverse -1 mod N, K = map(int, input().split()) N map(int, input().split()) map int input().split() ().split () input split K M = min(N - 1, K) M min(N - 1, K) min N - 1 N 1 K """
m = 0,1,2,...,M

N部屋から、空き部屋をm個選ぶ
-> N_C_m

残りの(N-m)部屋に、N人を配置する（空き部屋が出来てはいけない）
まず、(N-m)部屋に1人ずつ配置し、残ったm人を(N-m)部屋に配置する
これは、m個のボールと(N-m-1)本の仕切りの並び替えに相当する
-> (m+N-m-1)_C_m = N-1_C_m
""" ans = 0 ans 0 for m in range(0, M + 1):
    ans += cmb(N, m, mod) * cmb(N - 1, m, mod)
    ans %= mod m range(0, M + 1) range 0 M + 1 M 1 ans += cmb(N, m, mod) * cmb(N - 1, m, mod) ans cmb(N, m, mod) * cmb(N - 1, m, mod) cmb(N, m, mod) cmb N m mod cmb(N - 1, m, mod) cmb N - 1 N 1 m mod ans %= mod ans mod print(ans) print ans mod = 10**9 + 7 10**9 + 7 mod N, K = map(int, input().split()) map(int, input().split()) N K = map(int, input().split()) map(int, input().split()) K ans = 0 0 ans ans %= mod mod ans g2 = [1, 1] [1, 1] g2 NN = 10**6 10**6 NN g1 = [1, 1] [1, 1] g1 ans += cmb(N, m, mod) * cmb(N - 1, m, mod) cmb(N, m, mod) * cmb(N - 1, m, mod) ans def cmb(n, r, mod):
    if (r < 0 or r > n):
        return 0
    r = min(r, n - r)
    return g1[n] * g2[r] * g2[n - r] % mod def cmb(n, r, mod):
    if (r < 0 or r > n):
        return 0
    r = min(r, n - r)
    return g1[n] * g2[r] * g2[n - r] % mod cmb inverse = [0, 1] [0, 1] inverse M = min(N - 1, K) min(N - 1, K) M
# 逆元を利用した組み合わせの計算
#############################################################
def cmb(n, r, mod):
    if (r < 0 or r > n):
        return 0
    r = min(r, n - r)
    return g1[n] * g2[r] * g2[n - r] % mod

mod = 10**9 + 7
NN = 10**6

g1 = [1, 1]
g2 = [1, 1]
inverse = [0, 1]

for i in range(2, NN + 1):
    g1.append((g1[-1] * i) % mod)
    inverse.append((-inverse[mod % i] * (mod // i)) % mod)
    g2.append((g2[-1] * inverse[-1]) % mod)
#############################################################

N, K = map(int, input().split())

# M = 空き部屋数の最大値
M = min(N - 1, K)

"""
m = 0,1,2,...,M

N部屋から、空き部屋をm個選ぶ
-> N_C_m

残りの(N-m)部屋に、N人を配置する（空き部屋が出来てはいけない）
まず、(N-m)部屋に1人ずつ配置し、残ったm人を(N-m)部屋に配置する
これは、m個のボールと(N-m-1)本の仕切りの並び替えに相当する
-> (m+N-m-1)_C_m = N-1_C_m
"""

ans = 0
for m in range(0, M + 1):
    ans += cmb(N, m, mod) * cmb(N - 1, m, mod)
    ans %= mod

print(ans)
