Problem:
Score : 400 points

Problem Statement

We have N+1 integers: 10^{100}, 10^{100}+1, ..., 10^{100}+N.

We will choose K or more of these integers. Find the number of possible values of the sum of the chosen numbers, modulo (10^9+7).

Constraints

1 \leq N \leq 2\times 10^5

1 \leq K \leq N+1

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N K

Output

Print the number of possible values of the sum, modulo (10^9+7).

Sample Input 1

3 2

Sample Output 1

10

The sum can take 10 values, as follows:

(10^{100})+(10^{100}+1)=2\times 10^{100}+1

(10^{100})+(10^{100}+2)=2\times 10^{100}+2

(10^{100})+(10^{100}+3)=(10^{100}+1)+(10^{100}+2)=2\times 10^{100}+3

(10^{100}+1)+(10^{100}+3)=2\times 10^{100}+4

(10^{100}+2)+(10^{100}+3)=2\times 10^{100}+5

(10^{100})+(10^{100}+1)+(10^{100}+2)=3\times 10^{100}+3

(10^{100})+(10^{100}+1)+(10^{100}+3)=3\times 10^{100}+4

(10^{100})+(10^{100}+2)+(10^{100}+3)=3\times 10^{100}+5

(10^{100}+1)+(10^{100}+2)+(10^{100}+3)=3\times 10^{100}+6

(10^{100})+(10^{100}+1)+(10^{100}+2)+(10^{100}+3)=4\times 10^{100}+6

Sample Input 2

200000 200001

Sample Output 2

1

We must choose all of the integers, so the sum can take just 1 value.

Sample Input 3

141421 35623

Sample Output 3

220280457

Solution in JavaScript (Node.js 12.16.1) (judge verdict: Time Limit Exceeded)

"use strict"
function main(arg) {
    var tmp = arg.trim().split("\n")[0].split(" ").map(Number)
    var N = tmp[0]
    var K = tmp[1]
    var list = []
    var counter = 0
    for (let i = K; i <= N + 1; i++) {
        list.push(i)
        // console.log(i)
        var min = []
        var max = []
        for (var j = 0; j < i; j++) {
            min.push(j)
        }
        for (var j = N; j > N - i; j--) {
            max.push(j)
        }
        var sumMin = sum(min)
        var sumMax = sum(max)
        for (var j = sumMin; j <= sumMax; j++) {
            counter++
        }
    }
    console.log(counter)
}
main(require('fs').readFileSync('/dev/stdin', 'utf8'));


// function combination(nums, k) {
//     let ans = [];
//     if (nums.length < k) {
//         return []
//     }
//     if (k === 1) {
//         for (let i = 0; i < nums.length; i++) {
//             ans[i] = [nums[i]];
//         }
//     } else {
//         for (let i = 0; i < nums.length - k + 1; i++) {
//             let row = combination(nums.slice(i + 1), k - 1);
//             for (let j = 0; j < row.length; j++) {
//                 ans.push([nums[i]].concat(row[j]));
//             }
//         }
//     }
//     return ans;
// }

function sum(arr) {
    return arr.reduce(function(prev, current, i, arr) {
        return prev+current;
    });
};