import sys, bisect, math, itertools, heapq, collections
from operator import itemgetter
# a.sort(key=itemgetter(i)) # i番目要素でsort
from functools import lru_cache
# @lru_cache(maxsize=None)
sys.setrecursionlimit(10**8)
input = sys.stdin.readline
INF = float('inf')
mod = 10**9 + 7
eps = 10**-7


def inp():
    '''
    一つの整数
    '''
    return int(input())


def inpl():
    '''
    一行に複数の整数
    '''
    return list(map(int, input().split()))


class combination():
    def __init__(self, mod):
        '''
        modを指定して初期化
        '''
        self.mod = mod
        self.fac = [1, 1]  # 階乗テーブル
        self.ifac = [1, 1]  # 階乗の逆元テーブル
        self.inv = [0, 1]  # 逆元計算用

    def calc(self, n, k):
        '''
        nCk%modを計算する
        '''
        if k < 0 or n < k:
            return 0
        self.make_tables(n)  # テーブル作成
        k = min(k, n - k)
        return self.fac[n] * (self.ifac[k] * self.ifac[n - k] %
                              self.mod) % self.mod

    def make_tables(self, n):
        '''
        階乗テーブル・階乗の逆元テーブルを作成
        '''
        for i in range(len(self.fac), n + 1):
            self.fac.append((self.fac[-1] * i) % self.mod)
            self.inv.append(
                (-self.inv[self.mod % i] * (self.mod // i)) % self.mod)
            self.ifac.append((self.ifac[-1] * self.inv[-1]) % self.mod)


comb = combination(mod)

n, k = inpl()
ans = 0
# m個の0人の部屋を作る
for m in range(min(n, k + 1)):
    # n個の部屋からm個の0人の部屋を選ぶ
    a = comb.calc(n, m) % mod
    # n個の部屋にm人を自由に割り当てる
    b = comb.calc(n - 1, n - m - 1) % mod
    ans += a * b % mod
print(ans % mod) import sys, bisect, math, itertools, heapq, collections sys bisect math itertools heapq collections from operator import itemgetter from functools import lru_cache sys.setrecursionlimit(10**8) sys.setrecursionlimit sys setrecursionlimit 10**8 10 8 input = sys.stdin.readline input sys.stdin.readline sys.stdin sys stdin readline INF = float('inf') INF float('inf') float 'inf' mod = 10**9 + 7 mod 10**9 + 7 10**9 10 9 7 eps = 10**-7 eps 10**-7 10 -7 def inp():
    '''
    一つの整数
    '''
    return int(input()) inp '''
    一つの整数
    ''' return int(input()) int(input()) int input() input def inpl():
    '''
    一行に複数の整数
    '''
    return list(map(int, input().split())) inpl '''
    一行に複数の整数
    ''' return list(map(int, input().split())) list(map(int, input().split())) list map(int, input().split()) map int input().split() ().split () input split class combination():
    def __init__(self, mod):
        '''
        modを指定して初期化
        '''
        self.mod = mod
        self.fac = [1, 1]  # 階乗テーブル
        self.ifac = [1, 1]  # 階乗の逆元テーブル
        self.inv = [0, 1]  # 逆元計算用

    def calc(self, n, k):
        '''
        nCk%modを計算する
        '''
        if k < 0 or n < k:
            return 0
        self.make_tables(n)  # テーブル作成
        k = min(k, n - k)
        return self.fac[n] * (self.ifac[k] * self.ifac[n - k] %
                              self.mod) % self.mod

    def make_tables(self, n):
        '''
        階乗テーブル・階乗の逆元テーブルを作成
        '''
        for i in range(len(self.fac), n + 1):
            self.fac.append((self.fac[-1] * i) % self.mod)
            self.inv.append(
                (-self.inv[self.mod % i] * (self.mod // i)) % self.mod)
            self.ifac.append((self.ifac[-1] * self.inv[-1]) % self.mod) combination def __init__(self, mod):
        '''
        modを指定して初期化
        '''
        self.mod = mod
        self.fac = [1, 1]  # 階乗テーブル
        self.ifac = [1, 1]  # 階乗の逆元テーブル
        self.inv = [0, 1]  # 逆元計算用

     __init__ '''
        modを指定して初期化
        ''' self.mod = mod self.mod self mod mod self.fac = [1, 1] self.fac self fac [1, 1] 1 1 self.ifac = [1, 1] self.ifac self ifac [1, 1] 1 1 self.inv = [0, 1] self.inv self inv [0, 1] 0 1 self self mod mod def calc(self, n, k):
        '''
        nCk%modを計算する
        '''
        if k < 0 or n < k:
            return 0
        self.make_tables(n)  # テーブル作成
        k = min(k, n - k)
        return self.fac[n] * (self.ifac[k] * self.ifac[n - k] %
                              self.mod) % self.mod

     calc '''
        nCk%modを計算する
        ''' if k < 0 or n < k:
            return 0
         k < 0 or n < k k < 0 k 0 n < k n k return 0 0 self.make_tables(n) self.make_tables self make_tables n k = min(k, n - k) k min(k, n - k) min k n - k n k return self.fac[n] * (self.ifac[k] * self.ifac[n - k] %
                              self.mod) % self.mod self.fac[n] * (self.ifac[k] * self.ifac[n - k] %
                              self.mod) % self.mod self.fac[n] * (self.ifac[k] * self.ifac[n - k] %
                              self.mod) self.fac[n] self.fac self fac n self.ifac[k] * self.ifac[n - k] %
                              self.mod self.ifac[k] * self.ifac[n - k] self.ifac[k] self.ifac self ifac k self.ifac[n - k] self.ifac self ifac n - k n k self.mod self mod self.mod self mod self self n n k k def make_tables(self, n):
        '''
        階乗テーブル・階乗の逆元テーブルを作成
        '''
        for i in range(len(self.fac), n + 1):
            self.fac.append((self.fac[-1] * i) % self.mod)
            self.inv.append(
                (-self.inv[self.mod % i] * (self.mod // i)) % self.mod)
            self.ifac.append((self.ifac[-1] * self.inv[-1]) % self.mod) make_tables '''
        階乗テーブル・階乗の逆元テーブルを作成
        ''' for i in range(len(self.fac), n + 1):
            self.fac.append((self.fac[-1] * i) % self.mod)
            self.inv.append(
                (-self.inv[self.mod % i] * (self.mod // i)) % self.mod)
            self.ifac.append((self.ifac[-1] * self.inv[-1]) % self.mod) i range(len(self.fac), n + 1) range len(self.fac) len self.fac self fac n + 1 n 1 self.fac.append((self.fac[-1] * i) % self.mod) self.fac.append self.fac self fac append (self.fac[-1] * i) % self.mod self.fac[-1] * i self.fac[-1] self.fac self fac -1 i self.mod self mod self.inv.append(
                (-self.inv[self.mod % i] * (self.mod // i)) % self.mod) self.inv.append self.inv self inv append (-self.inv[self.mod % i] * (self.mod // i)) % self.mod -self.inv[self.mod % i] * (self.mod // i) -self.inv[self.mod % i] self.inv[self.mod % i] self.inv self inv self.mod % i self.mod self mod i self.mod // i self.mod self mod i self.mod self mod self.ifac.append((self.ifac[-1] * self.inv[-1]) % self.mod) self.ifac.append self.ifac self ifac append (self.ifac[-1] * self.inv[-1]) % self.mod self.ifac[-1] * self.inv[-1] self.ifac[-1] self.ifac self ifac -1 self.inv[-1] self.inv self inv -1 self.mod self mod self self n n comb = combination(mod) comb combination(mod) combination mod n, k = inpl() n inpl() inpl k ans = 0 ans 0 for m in range(min(n, k + 1)):
    # n個の部屋からm個の0人の部屋を選ぶ
    a = comb.calc(n, m) % mod
    # n個の部屋にm人を自由に割り当てる
    b = comb.calc(n - 1, n - m - 1) % mod
    ans += a * b % mod m range(min(n, k + 1)) range min(n, k + 1) min n k + 1 k 1 a = comb.calc(n, m) % mod a comb.calc(n, m) % mod comb.calc(n, m) comb.calc comb calc n m mod b = comb.calc(n - 1, n - m - 1) % mod b comb.calc(n - 1, n - m - 1) % mod comb.calc(n - 1, n - m - 1) comb.calc comb calc n - 1 n 1 n - m - 1 n - m n m 1 mod ans += a * b % mod ans a * b % mod a * b a b mod print(ans % mod) print ans % mod ans mod INF = float('inf') float('inf') INF b = comb.calc(n - 1, n - m - 1) % mod comb.calc(n - 1, n - m - 1) % mod b ans += a * b % mod a * b % mod ans input = sys.stdin.readline sys.stdin.readline input def inpl():
    '''
    一行に複数の整数
    '''
    return list(map(int, input().split())) def inpl():
    '''
    一行に複数の整数
    '''
    return list(map(int, input().split())) inpl comb = combination(mod) combination(mod) comb eps = 10**-7 10**-7 eps a = comb.calc(n, m) % mod comb.calc(n, m) % mod a def inp():
    '''
    一つの整数
    '''
    return int(input()) def inp():
    '''
    一つの整数
    '''
    return int(input()) inp n, k = inpl() inpl() n k = inpl() inpl() k mod = 10**9 + 7 10**9 + 7 mod class combination():
    def __init__(self, mod):
        '''
        modを指定して初期化
        '''
        self.mod = mod
        self.fac = [1, 1]  # 階乗テーブル
        self.ifac = [1, 1]  # 階乗の逆元テーブル
        self.inv = [0, 1]  # 逆元計算用

    def calc(self, n, k):
        '''
        nCk%modを計算する
        '''
        if k < 0 or n < k:
            return 0
        self.make_tables(n)  # テーブル作成
        k = min(k, n - k)
        return self.fac[n] * (self.ifac[k] * self.ifac[n - k] %
                              self.mod) % self.mod

    def make_tables(self, n):
        '''
        階乗テーブル・階乗の逆元テーブルを作成
        '''
        for i in range(len(self.fac), n + 1):
            self.fac.append((self.fac[-1] * i) % self.mod)
            self.inv.append(
                (-self.inv[self.mod % i] * (self.mod // i)) % self.mod)
            self.ifac.append((self.ifac[-1] * self.inv[-1]) % self.mod) class combination():
    def __init__(self, mod):
        '''
        modを指定して初期化
        '''
        self.mod = mod
        self.fac = [1, 1]  # 階乗テーブル
        self.ifac = [1, 1]  # 階乗の逆元テーブル
        self.inv = [0, 1]  # 逆元計算用

    def calc(self, n, k):
        '''
        nCk%modを計算する
        '''
        if k < 0 or n < k:
            return 0
        self.make_tables(n)  # テーブル作成
        k = min(k, n - k)
        return self.fac[n] * (self.ifac[k] * self.ifac[n - k] %
                              self.mod) % self.mod

    def make_tables(self, n):
        '''
        階乗テーブル・階乗の逆元テーブルを作成
        '''
        for i in range(len(self.fac), n + 1):
            self.fac.append((self.fac[-1] * i) % self.mod)
            self.inv.append(
                (-self.inv[self.mod % i] * (self.mod // i)) % self.mod)
            self.ifac.append((self.ifac[-1] * self.inv[-1]) % self.mod) combination ans = 0 0 ans
import sys, bisect, math, itertools, heapq, collections
from operator import itemgetter
# a.sort(key=itemgetter(i)) # i番目要素でsort
from functools import lru_cache
# @lru_cache(maxsize=None)
sys.setrecursionlimit(10**8)
input = sys.stdin.readline
INF = float('inf')
mod = 10**9 + 7
eps = 10**-7


def inp():
    '''
    一つの整数
    '''
    return int(input())


def inpl():
    '''
    一行に複数の整数
    '''
    return list(map(int, input().split()))


class combination():
    def __init__(self, mod):
        '''
        modを指定して初期化
        '''
        self.mod = mod
        self.fac = [1, 1]  # 階乗テーブル
        self.ifac = [1, 1]  # 階乗の逆元テーブル
        self.inv = [0, 1]  # 逆元計算用

    def calc(self, n, k):
        '''
        nCk%modを計算する
        '''
        if k < 0 or n < k:
            return 0
        self.make_tables(n)  # テーブル作成
        k = min(k, n - k)
        return self.fac[n] * (self.ifac[k] * self.ifac[n - k] %
                              self.mod) % self.mod

    def make_tables(self, n):
        '''
        階乗テーブル・階乗の逆元テーブルを作成
        '''
        for i in range(len(self.fac), n + 1):
            self.fac.append((self.fac[-1] * i) % self.mod)
            self.inv.append(
                (-self.inv[self.mod % i] * (self.mod // i)) % self.mod)
            self.ifac.append((self.ifac[-1] * self.inv[-1]) % self.mod)


comb = combination(mod)

n, k = inpl()
ans = 0
# m個の0人の部屋を作る
for m in range(min(n, k + 1)):
    # n個の部屋からm個の0人の部屋を選ぶ
    a = comb.calc(n, m) % mod
    # n個の部屋にm人を自由に割り当てる
    b = comb.calc(n - 1, n - m - 1) % mod
    ans += a * b % mod
print(ans % mod)
