#include <bits/stdc++.h>
using namespace std;
const int MX = 1e5, MOD = 1e9+7;
typedef long long ll;
#define int long long
int32_t main() {
	ios::sync_with_stdio(0);cin.tie(0);
	int n, k;
	cin >> n >> k;
	vector<int> terms;
	int t;
	for(t=1;t*t<=n; t++) {
		terms.push_back(n/t);
	}
	t--;
	vector<int> arr;
	for(int i=1; i<=t; i++) {
		arr.push_back(1);
	}
	if(terms.back()-t > 0)
		arr.push_back(terms.back()-t);
	for(int i=(int)terms.size()-1; i>0; i--) {
		arr.push_back(terms[i-1]-terms[i]);
	}
	vector<vector<int>> dp(k, vector<int>(arr.size()));
	dp[0] = arr;
	int m = arr.size();
	for(int i=1; i<k; i++) {
		int acc = 0;
		for(int j=0; j<m; j++) {
			acc += dp[i-1][j];
			acc %= MOD;
			dp[i][m-1-j] = (acc*arr[m-1-j])%MOD;
		}
	}
	cout << accumulate(dp[k-1].begin(), dp[k-1].end(), 0ll) % MOD;
}
### 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>
using namespace std;
const int MX = 1e5, MOD = 1e9+7;
typedef long long ll;
#define int long long
int32_t main() {
	ios::sync_with_stdio(0);cin.tie(0);
	int n, k;
	cin >> n >> k;
	vector<int> terms;
	int t;
	for(t=1;t*t<=n; t++) {
		terms.push_back(n/t);
	}
	t--;
	vector<int> arr;
	for(int i=1; i<=t; i++) {
		arr.push_back(1);
	}
	if(terms.back()-t > 0)
		arr.push_back(terms.back()-t);
	for(int i=(int)terms.size()-1; i>0; i--) {
		arr.push_back(terms[i-1]-terms[i]);
	}
	vector<vector<int>> dp(k, vector<int>(arr.size()));
	dp[0] = arr;
	int m = arr.size();
	for(int i=1; i<k; i++) {
		int acc = 0;
		for(int j=0; j<m; j++) {
			acc += dp[i-1][j];
			acc %= MOD;
			dp[i][m-1-j] = (acc*arr[m-1-j])%MOD;
		}
	}
	cout << accumulate(dp[k-1].begin(), dp[k-1].end(), 0ll) % MOD;
}
```