#include <iostream>
#include <vector>
using namespace std;
using ll = long long;
const ll MOD = 1e9 + 7;

// Finds smallest s s.t. n/s < t
ll bins(ll n, ll t) {
	ll low = 1;
	ll high = n+1;
	while(low != high) {
		ll s = (low + high) / 2;
		if (n/s < t) high = s;
		else low = s + 1;
	}
	return low;
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	ll n, k;
	cin >> n >> k;
	
	vector<ll> cou, val;
	ll s = 1;
	for (; s <= n;) {
		ll v = n/s;
		ll nxt_s = bins(n, v);
		cou.push_back(nxt_s - s);
		val.push_back(v);
		s = nxt_s;
	}
	int m = cou.size();

	vector<ll> cur = cou;
	vector<ll> nxt(m);
	for (int i = 1; i < k; ++i) {
		for (int j = 0; j < m; ++j) {
			int t = m-1-j;
			nxt[t] = cur[j] % MOD;
		}
		for (int j = m-1; j >= 0; --j) {
			nxt[j] = (nxt[j] + (j+1 < m ? nxt[j+1] : 0)) % MOD;
			cur[j] = (nxt[j] * cou[j]) % MOD;
		}
	}

	ll res = 0;
	for (auto v : cur) res = (res + v) % MOD;
	cout << res << '\n';
}
### Prompt

Develop a solution in Cpp to the problem described below:

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>
using namespace std;
using ll = long long;
const ll MOD = 1e9 + 7;

// Finds smallest s s.t. n/s < t
ll bins(ll n, ll t) {
	ll low = 1;
	ll high = n+1;
	while(low != high) {
		ll s = (low + high) / 2;
		if (n/s < t) high = s;
		else low = s + 1;
	}
	return low;
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	ll n, k;
	cin >> n >> k;
	
	vector<ll> cou, val;
	ll s = 1;
	for (; s <= n;) {
		ll v = n/s;
		ll nxt_s = bins(n, v);
		cou.push_back(nxt_s - s);
		val.push_back(v);
		s = nxt_s;
	}
	int m = cou.size();

	vector<ll> cur = cou;
	vector<ll> nxt(m);
	for (int i = 1; i < k; ++i) {
		for (int j = 0; j < m; ++j) {
			int t = m-1-j;
			nxt[t] = cur[j] % MOD;
		}
		for (int j = m-1; j >= 0; --j) {
			nxt[j] = (nxt[j] + (j+1 < m ? nxt[j+1] : 0)) % MOD;
			cur[j] = (nxt[j] * cou[j]) % MOD;
		}
	}

	ll res = 0;
	for (auto v : cur) res = (res + v) % MOD;
	cout << res << '\n';
}
```