#include <bits/stdc++.h>

#define REP(i,n) for (int i=0;i<(n);++i)
#define MOD 1000000007

using namespace std;

using ll = long long;

int main() {
    int N, K;
    cin >> N >> K;
    int sqrtN;
    for (ll i = 1; i <= N + 1; ++i) {
        if (i * i > N) {
            sqrtN = i - 1;
            break;
        }
    }

    vector<ll> a(2 * sqrtN, 0);
    REP(i, sqrtN) {
        a[i] = i + 1;
        a[sqrtN + i] = N / (sqrtN - i);
    }
    REP(_, K - 1) {
        vector<ll> old_a(a.begin(), a.begin() + sqrtN);
        REP(i, sqrtN) {
            a[i] = (i > 0 ? a[i - 1] : 0) + a[a.size() - 1 - i];
        }
        REP(i, sqrtN) {
            int left = i > 0 ? N / (sqrtN - i + 1) : sqrtN;
            int right = N / (sqrtN - i);
            a[sqrtN + i] = (a[sqrtN + i - 1] + (right - left) * old_a[sqrtN - 1 - i] % MOD) % MOD;
        }
    }
    cout << a[a.size() - 1] << endl;
    return 0;
}
### Prompt

In cpp, your task is to solve the following problem:

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 <bits/stdc++.h>

#define REP(i,n) for (int i=0;i<(n);++i)
#define MOD 1000000007

using namespace std;

using ll = long long;

int main() {
    int N, K;
    cin >> N >> K;
    int sqrtN;
    for (ll i = 1; i <= N + 1; ++i) {
        if (i * i > N) {
            sqrtN = i - 1;
            break;
        }
    }

    vector<ll> a(2 * sqrtN, 0);
    REP(i, sqrtN) {
        a[i] = i + 1;
        a[sqrtN + i] = N / (sqrtN - i);
    }
    REP(_, K - 1) {
        vector<ll> old_a(a.begin(), a.begin() + sqrtN);
        REP(i, sqrtN) {
            a[i] = (i > 0 ? a[i - 1] : 0) + a[a.size() - 1 - i];
        }
        REP(i, sqrtN) {
            int left = i > 0 ? N / (sqrtN - i + 1) : sqrtN;
            int right = N / (sqrtN - i);
            a[sqrtN + i] = (a[sqrtN + i - 1] + (right - left) * old_a[sqrtN - 1 - i] % MOD) % MOD;
        }
    }
    cout << a[a.size() - 1] << endl;
    return 0;
}
```