#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
#include<cstring>
#define ll long long
using namespace std;
ll dp[110][100000];
ll gaet[100000];
const ll mod = 1e9 + 7;
vector<ll> vt;
ll n, m;
int getidx(ll x) {
	return lower_bound(vt.begin(), vt.end(), x) - vt.begin();
}
ll func(ll here,ll xx) {
	if (here == m)return 1;
	if (xx < 0)return 0;
	ll &ret = dp[here][xx];
	if (ret != -1)return ret;
	ret = 0;
	ret += func(here, xx - 1);
	ret %= mod;
	ret += gaet[xx] * func(here + 1, getidx(n / vt[xx]));
	ret %= mod;
	return ret;
}
int main()
{
	memset(dp, -1, sizeof(dp));
	scanf("%lld %lld", &n, &m);
	for (ll i = 1; i <= sqrt(n); i++) {
		vt.push_back(i);
		gaet[vt.size() - 1] = 1;
	}
	for (ll i = sqrt(n); i >= 1; i--) {
		if(n/i!=vt[vt.size()-1])
			vt.push_back(n/i);
		gaet[vt.size() - 1] =n/i-n/(i+1);
	}
	printf("%lld", func(0, vt.size() - 1));
}
### 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<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
#include<cstring>
#define ll long long
using namespace std;
ll dp[110][100000];
ll gaet[100000];
const ll mod = 1e9 + 7;
vector<ll> vt;
ll n, m;
int getidx(ll x) {
	return lower_bound(vt.begin(), vt.end(), x) - vt.begin();
}
ll func(ll here,ll xx) {
	if (here == m)return 1;
	if (xx < 0)return 0;
	ll &ret = dp[here][xx];
	if (ret != -1)return ret;
	ret = 0;
	ret += func(here, xx - 1);
	ret %= mod;
	ret += gaet[xx] * func(here + 1, getidx(n / vt[xx]));
	ret %= mod;
	return ret;
}
int main()
{
	memset(dp, -1, sizeof(dp));
	scanf("%lld %lld", &n, &m);
	for (ll i = 1; i <= sqrt(n); i++) {
		vt.push_back(i);
		gaet[vt.size() - 1] = 1;
	}
	for (ll i = sqrt(n); i >= 1; i--) {
		if(n/i!=vt[vt.size()-1])
			vt.push_back(n/i);
		gaet[vt.size() - 1] =n/i-n/(i+1);
	}
	printf("%lld", func(0, vt.size() - 1));
}
```