#include <iostream>
#include <cmath>
#include <cstring>

using namespace std;

const int Z = 1e9+7;

int main() {
    int n, k;
    cin >> n >> k;

    int sqn = sqrt(n);

    int dp0[k+1][sqn+1], dp1[k+1][sqn+1];
    memset(dp0, 0, sizeof(dp0));
    memset(dp1, 0, sizeof(dp1));
    for (int i = 1; i <= sqn; i++) {
        dp0[0][i] = dp1[0][i] = 1;
    }

    for (int i = 1; i <= k; i++) {
        for (int j = 1; j <= sqn; j++) {
            dp0[i][j] = (dp0[i][j-1] + dp1[i-1][j]) % Z;
        }

        int s = dp0[i][sqn], lj = sqn;
        for (int j = sqn; j >= 1; j--) {
            s = (s + 1ll * (n / j - lj) * dp0[i-1][j]) % Z;
            dp1[i][j] = s;
            lj = n / j;
        }
    }

    cout << dp1[k][1] << endl;

    return 0;
}

### Prompt

Construct a Cpp code solution to the problem outlined:

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
#include <iostream>
#include <cmath>
#include <cstring>

using namespace std;

const int Z = 1e9+7;

int main() {
    int n, k;
    cin >> n >> k;

    int sqn = sqrt(n);

    int dp0[k+1][sqn+1], dp1[k+1][sqn+1];
    memset(dp0, 0, sizeof(dp0));
    memset(dp1, 0, sizeof(dp1));
    for (int i = 1; i <= sqn; i++) {
        dp0[0][i] = dp1[0][i] = 1;
    }

    for (int i = 1; i <= k; i++) {
        for (int j = 1; j <= sqn; j++) {
            dp0[i][j] = (dp0[i][j-1] + dp1[i-1][j]) % Z;
        }

        int s = dp0[i][sqn], lj = sqn;
        for (int j = sqn; j >= 1; j--) {
            s = (s + 1ll * (n / j - lj) * dp0[i-1][j]) % Z;
            dp1[i][j] = s;
            lj = n / j;
        }
    }

    cout << dp1[k][1] << endl;

    return 0;
}

```