#include<bits/stdc++.h>

using namespace std; 
const int mod = 1e9+7;
vector<pair<int,int> > fa;
long long dp[101][100000];
int main(){
	//cout<<sqrt(1000000000)<<endl;
	long long n,k;
	cin>>n>>k;
	for(int i=1;i*i<=n;i++){
		fa.push_back({i,0});
		fa.push_back({n/i,0});
	}
	sort(fa.begin(),fa.end());
	fa.erase(unique(fa.begin(),fa.end()),fa.end());
	map<long long,long long> pos;
	int m=(int)fa.size();
	//cout<<m<<endl;
	for(int i=0;i<m-1;i++){
		long long l=n/(fa[i+1].first);
		long long r=n/(fa[i].first);
		fa[i].second=r-l;
	}
	fa.back().second=1;
	for(int i=0;i<m;i++) pos[fa[i].first]=i;
	dp[0][pos[n]]=1;
	for(int i=0;i<k;i++){
		for(int j=m-2;j>=0;j--) dp[i][j]=(dp[i][j]%mod+dp[i][j+1]%mod)%mod;
		for(int j=0;j<m;j++){
			int nj=pos[n/fa[j].first];
			dp[i+1][j]=(dp[i+1][j]%mod+(dp[i][nj]%mod*fa[j].second%mod)%mod)%mod;
		}
	}
	long long ans=0;
	for(int i=0;i<m;i++) ans=(ans%mod+dp[k][i]%mod)%mod;
	cout<<ans%mod<<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>

using namespace std; 
const int mod = 1e9+7;
vector<pair<int,int> > fa;
long long dp[101][100000];
int main(){
	//cout<<sqrt(1000000000)<<endl;
	long long n,k;
	cin>>n>>k;
	for(int i=1;i*i<=n;i++){
		fa.push_back({i,0});
		fa.push_back({n/i,0});
	}
	sort(fa.begin(),fa.end());
	fa.erase(unique(fa.begin(),fa.end()),fa.end());
	map<long long,long long> pos;
	int m=(int)fa.size();
	//cout<<m<<endl;
	for(int i=0;i<m-1;i++){
		long long l=n/(fa[i+1].first);
		long long r=n/(fa[i].first);
		fa[i].second=r-l;
	}
	fa.back().second=1;
	for(int i=0;i<m;i++) pos[fa[i].first]=i;
	dp[0][pos[n]]=1;
	for(int i=0;i<k;i++){
		for(int j=m-2;j>=0;j--) dp[i][j]=(dp[i][j]%mod+dp[i][j+1]%mod)%mod;
		for(int j=0;j<m;j++){
			int nj=pos[n/fa[j].first];
			dp[i+1][j]=(dp[i+1][j]%mod+(dp[i][nj]%mod*fa[j].second%mod)%mod)%mod;
		}
	}
	long long ans=0;
	for(int i=0;i<m;i++) ans=(ans%mod+dp[k][i]%mod)%mod;
	cout<<ans%mod<<endl;
	return 0;
} 
```