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 C++ (GCC 9.2.1) (judge verdict: Time Limit Exceeded)

#define _CRT_SECURE_NO_WARNINGS
#include <algorithm>
#include <iomanip>
#include <vector>
#include <stack>
#include <string>
#include <bitset>
#include <queue>
#include <iostream>
#include <cmath>
#include <set>
#define cz size_t
#define fx(x) << fixed;cout << setprecision(x)
#define u unsigned
#define ll long long
using namespace std;
int a, n=3, in, r, t, c = 0, k, mx, b, j = 1, m, l, y, rd;
double pi = 3.1415926535;
vector<int > f;
vector<vector<int>> g;
bitset<200001> bt(0x0);
string s;
bool ch = true;
stack<cz> q, ans;
vector<bool> used;
set<pair<int,int>> st;
void cn(int s)
{
	for(cz i=0;i<=n;i++)
		if (!bt.test(i))
		{
			if (b >= k-1)
				if (st.find(make_pair(s + i,b)) == st.end())
				{
					st.insert(make_pair(s + i, b));
					c++;
					c %= 1000000007;
				}		
			b++;
			bt.set(i);
			cn(s + i);
			bt.reset(i);
		}
	b--;
}
int main()
{
	cin.tie();
	cout.tie();
	ios::sync_with_stdio(false);
	//freopen("aquarium.out", "w", stdout); freopen("aquarium.in", "r", stdin);
	cin >> n>>k;
	cn(0);
	cout << c;
	return 0;
}