# 0人になる部屋の数
# ・最小0 (k = 1　ないしは　N = 2 and k = 3が制約外なので必ず0になる)
# ・最大 min(k,N-1) (k人が部屋を空に出来るが、1部屋は必ず空でない部屋が残る)
# min(k,N-1)部屋が空になるということは、N-min(k,N-1)部屋には必ず人がいる
# 空でない部屋の最大数はN - K
# N - K - 1部屋に割り振るパターンはあり得ない
# つまりN-min(k,N-1)-1部屋に人がいるケースはあり得ない
# N人をN部屋に割り振る場合の数から、
# N人をN-min(k,N-1)-1部屋に割り振る場合の数を引く
# いずれも0の場合を含む
# N個をK箱に割り振る場合の数は、N+K-1 C N

DIV = 10 ** 9 + 7
n = 10**6
g1 = [1, 1] # 元テーブル
g2 = [1, 1] #逆元テーブル
inverse = [0, 1] #逆元テーブル計算用テーブル

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

def nCr(n, r, DIV):
    if ( r<0 or r>n ):
        return 0
    r = min(r, n-r)
    return g1[n] * g2[r] * g2[n-r] % DIV

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

# N人をN部屋に割り振る場合の数から、
# N人をN-min(k,N-1)-1部屋に割り振る場合の数を引く
# いずれも0の場合を含む
# N個をK箱に割り振る場合の数は、N+K-1 C N

ans = 0
for i in range(min(K,N-1) + 1):
  a = nCr(N,i,DIV)
  
  # N-i個の部屋にN個のボールを詰める
  # N個のうちのN-i個をまず1個ずつ詰める
  # 残りはN - (N - i) = i個
  # i個のボールをN-i個に詰める。i個と(N-i-1)個の仕切りの並び替え
  # (i + N - i - 1) C i = (N-1) C i
  b = nCr(N-1,i,DIV)
  
  ans += (a * b) % DIV
  ans %= DIV
  
print(ans) DIV = 10 ** 9 + 7 DIV 10 ** 9 + 7 10 ** 9 10 9 7 n = 10**6 n 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, n + 1 ):
    g1.append( ( g1[-1] * i ) % DIV )
    inverse.append( ( -inverse[DIV % i] * (DIV//i) ) % DIV )
    g2.append( (g2[-1] * inverse[-1]) % DIV ) i range( 2, n + 1 ) range 2 n + 1 n 1 g1.append( ( g1[-1] * i ) % DIV ) g1.append g1 append ( g1[-1] * i ) % DIV g1[-1] * i g1[-1] g1 -1 i DIV inverse.append( ( -inverse[DIV % i] * (DIV//i) ) % DIV ) inverse.append inverse append ( -inverse[DIV % i] * (DIV//i) ) % DIV -inverse[DIV % i] * (DIV//i) -inverse[DIV % i] inverse[DIV % i] inverse DIV % i DIV i DIV//i DIV i DIV g2.append( (g2[-1] * inverse[-1]) % DIV ) g2.append g2 append (g2[-1] * inverse[-1]) % DIV g2[-1] * inverse[-1] g2[-1] g2 -1 inverse[-1] inverse -1 DIV def nCr(n, r, DIV):
    if ( r<0 or r>n ):
        return 0
    r = min(r, n-r)
    return g1[n] * g2[r] * g2[n-r] % DIV nCr 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] % DIV g1[n] * g2[r] * g2[n-r] % DIV 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 DIV n n r r DIV DIV N,K = map(int,input().split()) N map(int,input().split()) map int input().split() ().split () input split K ans = 0 ans 0 for i in range(min(K,N-1) + 1):
  a = nCr(N,i,DIV)
  
  # N-i個の部屋にN個のボールを詰める
  # N個のうちのN-i個をまず1個ずつ詰める
  # 残りはN - (N - i) = i個
  # i個のボールをN-i個に詰める。i個と(N-i-1)個の仕切りの並び替え
  # (i + N - i - 1) C i = (N-1) C i
  b = nCr(N-1,i,DIV)
  
  ans += (a * b) % DIV
  ans %= DIV
   i range(min(K,N-1) + 1) range min(K,N-1) + 1 min(K,N-1) min K N-1 N 1 1 a = nCr(N,i,DIV) a nCr(N,i,DIV) nCr N i DIV b = nCr(N-1,i,DIV) b nCr(N-1,i,DIV) nCr N-1 N 1 i DIV ans += (a * b) % DIV ans (a * b) % DIV a * b a b DIV ans %= DIV ans DIV print(ans) print ans ans %= DIV DIV ans K = map(int,input().split()) map(int,input().split()) K ans += (a * b) % DIV (a * b) % DIV ans def nCr(n, r, DIV):
    if ( r<0 or r>n ):
        return 0
    r = min(r, n-r)
    return g1[n] * g2[r] * g2[n-r] % DIV def nCr(n, r, DIV):
    if ( r<0 or r>n ):
        return 0
    r = min(r, n-r)
    return g1[n] * g2[r] * g2[n-r] % DIV nCr DIV = 10 ** 9 + 7 10 ** 9 + 7 DIV N,K = map(int,input().split()) map(int,input().split()) N a = nCr(N,i,DIV) nCr(N,i,DIV) a ans = 0 0 ans n = 10**6 10**6 n g1 = [1, 1] [1, 1] g1 inverse = [0, 1] [0, 1] inverse b = nCr(N-1,i,DIV) nCr(N-1,i,DIV) b g2 = [1, 1] [1, 1] g2
# 0人になる部屋の数
# ・最小0 (k = 1　ないしは　N = 2 and k = 3が制約外なので必ず0になる)
# ・最大 min(k,N-1) (k人が部屋を空に出来るが、1部屋は必ず空でない部屋が残る)
# min(k,N-1)部屋が空になるということは、N-min(k,N-1)部屋には必ず人がいる
# 空でない部屋の最大数はN - K
# N - K - 1部屋に割り振るパターンはあり得ない
# つまりN-min(k,N-1)-1部屋に人がいるケースはあり得ない
# N人をN部屋に割り振る場合の数から、
# N人をN-min(k,N-1)-1部屋に割り振る場合の数を引く
# いずれも0の場合を含む
# N個をK箱に割り振る場合の数は、N+K-1 C N

DIV = 10 ** 9 + 7
n = 10**6
g1 = [1, 1] # 元テーブル
g2 = [1, 1] #逆元テーブル
inverse = [0, 1] #逆元テーブル計算用テーブル

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

def nCr(n, r, DIV):
    if ( r<0 or r>n ):
        return 0
    r = min(r, n-r)
    return g1[n] * g2[r] * g2[n-r] % DIV

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

# N人をN部屋に割り振る場合の数から、
# N人をN-min(k,N-1)-1部屋に割り振る場合の数を引く
# いずれも0の場合を含む
# N個をK箱に割り振る場合の数は、N+K-1 C N

ans = 0
for i in range(min(K,N-1) + 1):
  a = nCr(N,i,DIV)
  
  # N-i個の部屋にN個のボールを詰める
  # N個のうちのN-i個をまず1個ずつ詰める
  # 残りはN - (N - i) = i個
  # i個のボールをN-i個に詰める。i個と(N-i-1)個の仕切りの並び替え
  # (i + N - i - 1) C i = (N-1) C i
  b = nCr(N-1,i,DIV)
  
  ans += (a * b) % DIV
  ans %= DIV
  
print(ans)