Problem:
Score : 500 points

Problem Statement

There is a building with n rooms, numbered 1 to n.

We can move from any room to any other room in the building.

Let us call the following event a move: a person in some room i goes to another room j~ (i \neq j).

Initially, there was one person in each room in the building.

After that, we know that there were exactly k moves happened up to now.

We are interested in the number of people in each of the n rooms now. How many combinations of numbers of people in the n rooms are possible?

Find the count modulo (10^9 + 7).

Constraints

All values in input are integers.

3 \leq n \leq 2 \times 10^5

2 \leq k \leq 10^9

Input

Input is given from Standard Input in the following format:

n k

Output

Print the number of possible combinations of numbers of people in the n rooms now, modulo (10^9 + 7).

Sample Input 1

3 2

Sample Output 1

10

Let c_1, c_2, and c_3 be the number of people in Room 1, 2, and 3 now, respectively. There are 10 possible combination of (c_1, c_2, c_3):

(0, 0, 3)

(0, 1, 2)

(0, 2, 1)

(0, 3, 0)

(1, 0, 2)

(1, 1, 1)

(1, 2, 0)

(2, 0, 1)

(2, 1, 0)

(3, 0, 0)

For example, (c_1, c_2, c_3) will be (0, 1, 2) if the person in Room 1 goes to Room 2 and then one of the persons in Room 2 goes to Room 3.

Sample Input 2

200000 1000000000

Sample Output 2

607923868

Print the count modulo (10^9 + 7).

Sample Input 3

15 6

Sample Output 3

22583772

Solution in PHP (5.6.30) (judge verdict: Wrong Answer)

<?php
    list($n, $k) = explode(" ", fgets(STDIN));
    $m = 1000000007;

    // 前処理
    $fact = [];
    $fact[0] = 1;
    for($i=1;$i<=$n;$i++)
    {
        // $nまでの階乗を求める
        $fact[$i] = $fact[$i-1]*$i%$m;
    }
    $ifact = [];
    $ifact[$n] = repeatSqrt($fact[$n], $m-2, $m);
    for($i=$n;$i>=1;$i--)
    {
        // $nまでの階乗の逆元を求める
        $ifact[$i-1] = $ifact[$i]*$i%$m;
    }
//    var_dump($fact);
//    var_dump($ifact);


    $ans = 0;
    
    if($k>$n){
        $k=$n;
    }

    for($i=0; $i<=$k; $i++)
    {
        $nCi = ($fact[$n]*$ifact[$i]%$m)*$ifact[$n-$i]%$m;
        $n1Ci = ($fact[$n-1]*$ifact[$i]%$m)*$ifact[$n-1-$i]%$m;
//        echo $i." ".$nCi." ".$n1Ci.PHP_EOL;

      $ans = ($ans+($nCi*$n1Ci%$m))%$m;
    }


    echo $ans;
    exit;

    /**
     * 繰り返し二乗法
     * @param $n 
     * @param $p
     * @param $m mod P
     * @param $a 
     */
    function repeatSqrt($b, $p, $m)
    {
    if($p==1)
    {
        return $b;
    }
    else if($p%2 == 0)
    {
        $t = repeatSqrt($b, floor($p/2), $m);
        return ($t * $t) % $m;
    }
    else
    {
        return ($b * repeatSqrt($b, $p-1, $m)) % $m;
    }
    }

    /**
     * 組み合わせ
     * @param $n 全体の数
     * @param $a 取り出す数
     * @param $m mod
     */
    function combination($n, $a, $m)
    {
        $x=1; // bunbo
        $y=1; // bunshi
        for($i=0;$i<$a;$i++)
        {
            $x=$x*($n-$i)%$m;
            $y=$y*($i+1)%$m;
        }
        $y=repeatSqrt($y, $m-2, $m);
        return ($x*$y)%$m;
    }