#include <bits/stdc++.h>
#define N (long long)(1e9 + 7)
using namespace std;

long long n,k,sqn;
vector<long long> cnt;
vector<vector<long long>> dp;

long long solve();

int main(){
    cin >> n >> k;
    sqn = sqrt(n);
    cout << solve() << endl;
    return 0;
}

long long solve(){
    long long bf = sqn;
    for(long long i = sqn;i > 0;--i){
        cnt.push_back(n / i - bf);
        bf = n / i;
    }
    dp.assign(k + 1,vector<long long>(2 * sqn,0));
    for(int i = 0;i < sqn;++i)dp[0][i] = 1;
    for(int i = 0;i < k;++i){
        for(int j = 0;j < sqn;++j){
            // <= sqrt(n)
            dp[i+1][j] = (dp[i][sqn-1] + dp[i][2 * sqn - 1 - j]) % N;
            if(j != 0)(dp[i+1][j] += dp[i+1][j-1]) %= N;
            // >sqrt(n)
            dp[i+1][j+sqn] = dp[i][sqn-1-j] * cnt[j] % N;
            if(j != 0)(dp[i+1][j+sqn] += dp[i+1][j-1+sqn]) %= N;
        }
    }
    return (dp[k][sqn-1] + dp[k][2 * sqn - 1]) % N;
}

### Prompt

Your challenge is to write a CPP solution 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>
#define N (long long)(1e9 + 7)
using namespace std;

long long n,k,sqn;
vector<long long> cnt;
vector<vector<long long>> dp;

long long solve();

int main(){
    cin >> n >> k;
    sqn = sqrt(n);
    cout << solve() << endl;
    return 0;
}

long long solve(){
    long long bf = sqn;
    for(long long i = sqn;i > 0;--i){
        cnt.push_back(n / i - bf);
        bf = n / i;
    }
    dp.assign(k + 1,vector<long long>(2 * sqn,0));
    for(int i = 0;i < sqn;++i)dp[0][i] = 1;
    for(int i = 0;i < k;++i){
        for(int j = 0;j < sqn;++j){
            // <= sqrt(n)
            dp[i+1][j] = (dp[i][sqn-1] + dp[i][2 * sqn - 1 - j]) % N;
            if(j != 0)(dp[i+1][j] += dp[i+1][j-1]) %= N;
            // >sqrt(n)
            dp[i+1][j+sqn] = dp[i][sqn-1-j] * cnt[j] % N;
            if(j != 0)(dp[i+1][j+sqn] += dp[i+1][j-1+sqn]) %= N;
        }
    }
    return (dp[k][sqn-1] + dp[k][2 * sqn - 1]) % N;
}

```