#pragma gcc optimize("Ofast")

#include "bits/stdc++.h"
using namespace std;
typedef int64_t lld;
const int mod = 1000000007;
vector<int> dp[2];
signed main(){
    int n, k, sqn;
    cin >> n >> k;
    sqn = pow(n, 0.5)-1;
    while(sqn*sqn <= n)sqn++;
    sqn--;
    int l = sqn*2 - (n/sqn == sqn? 1: 0);
    auto val = [&](int i){return i <= sqn ? i : n/(l+1-i);};
    dp[0].resize(l+1);
    dp[1].resize(l+1);
    dp[0][1] = 1;
    for(int i = 0; i < k; i++){
        int cnt = 0;
        for(int j = l; j > 0; j--)
            dp[1-i%2][j] = (cnt = (cnt + (lld)dp[i%2][l+1-j]*(val(l+1-j)-val(l-j))%mod) % mod);
    }
    int ans = 0;
    for(int i = 1; i <= l; i++)ans = (ans + (lld)dp[k%2][i]*(val(i)-val(i-1))%mod)%mod;
    cout << ans << endl;
}

### Prompt

Please provide a cpp coded solution to the problem described below:

Find the number of sequences of length K consisting of positive integers such that the product of any two adjacent elements is at most N, modulo 10^9+7.

Constraints

* 1\leq N\leq 10^9
* ~~1~~ 2\leq K\leq 100 (fixed at 21:33 JST)
* N and K are integers.

Input

Input is given from Standard Input in the following format:


N K


Output

Print the number of sequences, modulo 10^9+7.

Examples

Input

3 2


Output

5


Input

10 3


Output

147


Input

314159265 35


Output

457397712

### Response

```cpp
#pragma gcc optimize("Ofast")

#include "bits/stdc++.h"
using namespace std;
typedef int64_t lld;
const int mod = 1000000007;
vector<int> dp[2];
signed main(){
    int n, k, sqn;
    cin >> n >> k;
    sqn = pow(n, 0.5)-1;
    while(sqn*sqn <= n)sqn++;
    sqn--;
    int l = sqn*2 - (n/sqn == sqn? 1: 0);
    auto val = [&](int i){return i <= sqn ? i : n/(l+1-i);};
    dp[0].resize(l+1);
    dp[1].resize(l+1);
    dp[0][1] = 1;
    for(int i = 0; i < k; i++){
        int cnt = 0;
        for(int j = l; j > 0; j--)
            dp[1-i%2][j] = (cnt = (cnt + (lld)dp[i%2][l+1-j]*(val(l+1-j)-val(l-j))%mod) % mod);
    }
    int ans = 0;
    for(int i = 1; i <= l; i++)ans = (ans + (lld)dp[k%2][i]*(val(i)-val(i-1))%mod)%mod;
    cout << ans << endl;
}

```