#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define fi first #define se second #define mp make_pair #define rep(i, n) for(int i=0;i=0;--i) const int inf=1e9+7; const ll mod=1e9+7; const ll big=1e18; const double PI=2*asin(1); ll fact1[200005]; ll fact2[200005]; ll N, K; ll getcomb(ll a, ll b){ ll ue = fact2[a-K]; ll shita1=1, shita2=1, tmpshita1, tmpshita2; ll h = mod-2; ll two; while(h>0){ tmpshita1 = fact1[b]; tmpshita2 = fact2[a-b-K]; two = 1; while(2*two<=h){ two *= 2; tmpshita1 *= tmpshita1; tmpshita1 %= mod; tmpshita2 *= tmpshita2; tmpshita2 %= mod; } h -= two; shita1 *= tmpshita1; shita2 *= tmpshita2; shita1 %= mod; shita2 %= mod; } return ue*shita1%mod*shita2%mod; } int main() { fact1[0] = 1; ll tmp = 1; cin>>N>>K; for(ll i=0;i<200000000;++i){ if(i>0) tmp *= i; tmp %= mod; if(i<200005){ fact1[i] = tmp; } if(i>=K && i>A[i]; ll ans = 0; for(int i=0;i