#include <bits/stdc++.h>


const int MOD = 1e9 + 7;


int main(void)
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);

    int n, k;
    std::vector<int> boundary;
    std::cin >> n >> k;

    for (int x = 1, y; x <= n; x = y + 1) {
        y = n / (n / x);
        boundary.push_back(y - x + 1);
        x = y + 1;
    }

    static long long dp[105][70005];
    dp[0][0] = 1;
    for (int i = 1; i <= k; ++i) {
        long long temp = 0LL;
        for (int j = boundary.size() - 1; j >= 0; --j) {
            temp = (temp + dp[i - 1][boundary.size() - j - 1]) % MOD;
            dp[i][j] = temp * boundary[j] % MOD;
        }
    }

    long long ans = 0LL;
    for (int i = 0, i_END_ = boundary.size(); i < i_END_; ++i)
        ans = (ans + dp[k][i]) % MOD;
    std::cout << ans << std::endl;
    return 0;
}
### Prompt

Please create a solution in CPP to 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>


const int MOD = 1e9 + 7;


int main(void)
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);

    int n, k;
    std::vector<int> boundary;
    std::cin >> n >> k;

    for (int x = 1, y; x <= n; x = y + 1) {
        y = n / (n / x);
        boundary.push_back(y - x + 1);
        x = y + 1;
    }

    static long long dp[105][70005];
    dp[0][0] = 1;
    for (int i = 1; i <= k; ++i) {
        long long temp = 0LL;
        for (int j = boundary.size() - 1; j >= 0; --j) {
            temp = (temp + dp[i - 1][boundary.size() - j - 1]) % MOD;
            dp[i][j] = temp * boundary[j] % MOD;
        }
    }

    long long ans = 0LL;
    for (int i = 0, i_END_ = boundary.size(); i < i_END_; ++i)
        ans = (ans + dp[k][i]) % MOD;
    std::cout << ans << std::endl;
    return 0;
}
```