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 Fortran (GNU Fortran 9.2.1) (judge verdict: Accepted)

program main
  
  implicit none
  integer(8) :: n
  integer(8) :: i,j,k,l,m,ans
  integer(8), allocatable :: mm(:), ll(:)
  integer(8) :: tmp, summ
  
  read(*,*) n, k
  allocate( mm(k:n+1) )
  allocate( ll(k:n+1) )
  
  tmp = 0
  do j = 0, k - 2 
    tmp = tmp + j
  end do
  summ = tmp
  do j = k, n + 1  
   summ = summ + j - 1
    mm(j) = mm(j) + summ
  end do

  tmp = 0
  do j = n-k+1, n  
    tmp = tmp + j
  end do
  summ = tmp
  tmp  = n-k+1
  do j = k, n+1  
   ll(j) = summ
    tmp  = tmp - 1
    summ = summ + tmp
  end do

  ans = 0 
  do i = k, n + 1

    !m = 0
    !do j = 0, i - 1  
    !  m = m + j
    !end do
    !l = 0
    !do j = n-i+1, n 
    !  l = l + j
    !end do

    ans = ans + ll(i) - mm(i) + 1
    !ans = ans + l - mm(i) + 1

  end do
  print*, mod( ans, 10**9+7 ) 
  
end program main