CF886E Maximum Element

题目描述

从前有一个叫 Petya 的神仙,嫌自己的序列求 $\max$ 太慢了,于是将序列求 $\max$ 的代码改成了下面这个样子: ```cpp int fast_max(int n, int a[]) { int ans = 0; int offset = 0; for (int i = 0; i < n; ++i) if (ans < a[i]) { ans = a[i]; offset = 0; } else { offset = offset + 1; if (offset == k) return ans; } return ans; } ``` 这个函数的原理是,如果碰到一个数后面连续的 $k$ 个数都比它小,那么就把这个数当做序列的最大值。 然而很显然,这份代码是错的。这位 Petya 神仙对它出错的情况很感兴趣。于是他找到了同为神仙的你,让你求有多少长度为 $n$ 的排列,这个函数会返回错误的结果,即返回值不是 $n$。由于答案过大,你只需要输出这个数对 $10^9+7$ 取模的结果。

输入格式

一行两个正整数 $n$ 和 $k\ (1\leq n,k\leq 10^6)$,表示排列的长度和上面那份代码里的 $k$。

输出格式

一行一个整数,表示答案对 $10^9+7$ 取模后的值。

说明/提示

Permutations from second example: $ [4,1,2,3,5] $ , $ [4,1,3,2,5] $ , $ [4,2,1,3,5] $ , $ [4,2,3,1,5] $ , $ [4,3,1,2,5] $ , $ [4,3,2,1,5] $ .