#abc021d. [abc021_d]多重ループ

[abc021_d]多重ループ

问题文

新入职员工高桥君被分配到某公司作为新人程序员。高桥君的第一份工作是优化以下伪代码所表示的程序的速度。


n←(标准输入)
ans←0
for i=1..n
  for j=i..n
    ans ← ans+1
显示 ans 的值

对于高桥君来说,这样的工作是小菜一碟。考虑内部循环次数对每个 ii 的总和公式,可以得到 ans=n+n1++1=n(n+1)/2ans=n+n-1+…+1=n(n+1)/2,利用这个公式,我们可以很快得到答案。

部门对高桥君成功实现的极大加速非常期待。因此,上司决定给他更多的工作。

这项工作的内容是优化以下程序在 kk 层循环嵌套的情况下的速度。


n←(标准输入)
k←(标准输入)
ans←0
for a_1=1..n
  for a_2=a_1..n
    for a_3=a_2..n
      …
      for a_k=a_{k-1}..n // 假设 a_0=1
        ans ← ans+1
显示 ans 的值

即使是高桥君对此也感到有些困惑。原因是无法使用总和公式。

经过一番思考,他意识到该程序的输出是满足 1a1a2akn1≦a_1≦a_2≦…≦a_k≦n 的整数组 (a1,a2,,ak)(a_1,a_2,…,a_k) 的数量。然而,他无法想出一种方法来计算这样的组合数量。

作为他的同事,你决定替他完成这个任务。然而,答案可能非常大,因此请输出 ans 除以 1,000,000,007(=109+7)1,000,000,007(=10^9+7) 的余数。


输入

输入通过标准输入给出,格式如下:

nn kk

  • 第一行包含一个整数 n(1n105)n (1 ≦ n ≦ 10^5)
  • 第二行包含一个整数 k(1k105)k (1 ≦ k ≦ 10^5)

部分分

本问题设置了部分分。

  • 1n10001≦n≦1000 并且 1k10001≦k≦1000 时,得到 99 分。
  • 在包括上述数据集的所有数据集中得到正确答案时,额外得到 1 分。

输出

在一行中输出第二个程序中最终 ans 的值除以 1,000,000,0071,000,000,007 的余数。

请记住输出末尾的换行符。


示例1


10
2

输出1


55

示例2


10
3

输出2


220

示例3


10
4

输出3


715

示例4


400
296

输出4


546898535

示例5


100000
100000

输出5


939733670