Problem:
B： えびちゃんと数列 - Ebi-chan and Integer Sequences -

問題

えびちゃんは数列が好きです。中でも等差数列が特に好きです。
今回は以下の条件を満たす数列を作ることにしました。

長さ n の等差数列である

数列の i 番目の要素を s_i と定める時、全ての s_i (1 \leq i \leq n) が 0 \leq s_i \leq m を満たす整数である

上の条件を満たすような数列はいくつあるでしょうか？
ただし答えは非常に大きくなることがあるので、 10^9 + 7 で割った余りを出力してください。

入力形式

入力は一行で与えられる。

n m

n は数列の長さを表す。

制約

1 \leq n \leq 10^{15}

0 \leq m \leq 10^{15}

出力形式

条件を満たす等差数列の数を 10^9 + 7 で割った余りを一行に出力せよ。

入力例1

3 9

出力例1

50

入力例2

10000000000 10000000000

出力例2

999999942

入力は32bit整数には収まりきらないことに注意してください。

Solution in JAVA (judge verdict: Accepted)

import java.math.BigInteger;
import java.util.Scanner;

public class Main {

	public static void main(String args[]){

		int MOD = 1000000007;

		Scanner sc = new Scanner(System.in);
		Long first_N = sc.nextLong();
		Long first_M = sc.nextLong();

		Long first_limit;

		if(first_N == 1){
			System.out.println((first_M+1)%MOD);
		}else{

			if((first_M+1)%(first_N-1) == 0){
				first_limit = (first_M+1)/(first_N-1)-1;
			}else{
				first_limit = (first_M+1)/(first_N-1);
			}

			if(first_limit <= 0){
				System.out.println((first_M+1)%MOD);
			}else{

				BigInteger bigMOD = BigInteger.valueOf(MOD);

				BigInteger limit = BigInteger.valueOf(first_limit);

				BigInteger A = BigInteger.valueOf(first_M+1);

				BigInteger B = BigInteger.valueOf(2*(first_M+1));
				B = B.multiply(limit);

				BigInteger C = BigInteger.valueOf(first_N-1);
				C = C.multiply(limit);
				C = C.multiply(BigInteger.valueOf(first_limit+1));

				A = A.add(B).subtract(C);

				System.out.println(A.remainder(bigMOD));

			}

		}


	}
}