#include <iostream>
#include <vector>
#include <algorithm>

const int MOD = 1000000007;

int main() {
    int N, K;
    std::cin >> N >> K;

    std::vector<int> count, tmp;
    for (int i = 1; i * i <= N; i++) {
        count.push_back(i);
        if (i != N / i)
            tmp.push_back(N / i);
    }

    for (int i = tmp.size() - 1; i >= 0; i--)
        count.push_back(tmp[i]);
    int M = count.size();
    for (int i = M - 1; i > 0; i--)
        count[i] -= count[i - 1];

    std::vector<int> dp(count);
    for (int i = 0; i < K - 1; i++) {
        for (int i = 1; i < M; i++)
            dp[i] = (dp[i] + dp[i - 1]) % MOD;
        std::reverse(dp.begin(), dp.end());
        for (int i = 0; i < M; i++)
            dp[i] = 1LL * dp[i] * count[i] % MOD;
    }

    int ans = 0;
    for (int i = 0; i < M; i++)
        ans = (ans + dp[i]) % MOD;
    std::cout << ans << "\n";
}
### 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 <vector>
#include <algorithm>

const int MOD = 1000000007;

int main() {
    int N, K;
    std::cin >> N >> K;

    std::vector<int> count, tmp;
    for (int i = 1; i * i <= N; i++) {
        count.push_back(i);
        if (i != N / i)
            tmp.push_back(N / i);
    }

    for (int i = tmp.size() - 1; i >= 0; i--)
        count.push_back(tmp[i]);
    int M = count.size();
    for (int i = M - 1; i > 0; i--)
        count[i] -= count[i - 1];

    std::vector<int> dp(count);
    for (int i = 0; i < K - 1; i++) {
        for (int i = 1; i < M; i++)
            dp[i] = (dp[i] + dp[i - 1]) % MOD;
        std::reverse(dp.begin(), dp.end());
        for (int i = 0; i < M; i++)
            dp[i] = 1LL * dp[i] * count[i] % MOD;
    }

    int ans = 0;
    for (int i = 0; i < M; i++)
        ans = (ans + dp[i]) % MOD;
    std::cout << ans << "\n";
}
```