#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
const int INF = (1<<30);
const ll INFLL = (1ll<<60);
const ll MOD = (ll)(1e9+7);

#define l_ength size

void mul_mod(ll& a, ll b){
	a *= b;
	a %= MOD;
}

void add_mod(ll& a, ll b){
	a = (a<MOD)?a:(a-MOD);
	b = (b<MOD)?b:(b-MOD);
	a += b;
	a = (a<MOD)?a:(a-MOD);
}

vector<int> v;

ll dp[100][100100];

int main(void){
	int n,k,i,j,m;
	cin >> n >> k;
	for(i=1; i*i<=n; ++i){
		v.push_back(i);
		v.push_back(n/i+1);
		if((i+1)*(i+1)>n && (i != (n/i))){
			v.push_back(i+1);
		}
	}
	sort(v.begin(),v.end());
	m = v.l_ength() - 1;
	for(j=0; j<m; ++j){
		dp[0][j] = v[j+1]-v[j];
		dp[0][j] %= MOD;
	}
	for(j=1; j<m; ++j){
		add_mod(dp[0][j],dp[0][j-1]);
	}
	for(i=1; i<k; ++i){
		for(j=0; j<m; ++j){
			dp[i][j] = dp[i-1][m-j-1];
			mul_mod(dp[i][j],(v[j+1]-v[j])%MOD);
		}
		for(j=1; j<m; ++j){
			add_mod(dp[i][j],dp[i][j-1]);
		}
	}
	cout << dp[k-1][m-1] << endl;
	return 0;
}

### 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;
typedef long long ll;
const int INF = (1<<30);
const ll INFLL = (1ll<<60);
const ll MOD = (ll)(1e9+7);

#define l_ength size

void mul_mod(ll& a, ll b){
	a *= b;
	a %= MOD;
}

void add_mod(ll& a, ll b){
	a = (a<MOD)?a:(a-MOD);
	b = (b<MOD)?b:(b-MOD);
	a += b;
	a = (a<MOD)?a:(a-MOD);
}

vector<int> v;

ll dp[100][100100];

int main(void){
	int n,k,i,j,m;
	cin >> n >> k;
	for(i=1; i*i<=n; ++i){
		v.push_back(i);
		v.push_back(n/i+1);
		if((i+1)*(i+1)>n && (i != (n/i))){
			v.push_back(i+1);
		}
	}
	sort(v.begin(),v.end());
	m = v.l_ength() - 1;
	for(j=0; j<m; ++j){
		dp[0][j] = v[j+1]-v[j];
		dp[0][j] %= MOD;
	}
	for(j=1; j<m; ++j){
		add_mod(dp[0][j],dp[0][j-1]);
	}
	for(i=1; i<k; ++i){
		for(j=0; j<m; ++j){
			dp[i][j] = dp[i-1][m-j-1];
			mul_mod(dp[i][j],(v[j+1]-v[j])%MOD);
		}
		for(j=1; j<m; ++j){
			add_mod(dp[i][j],dp[i][j-1]);
		}
	}
	cout << dp[k-1][m-1] << endl;
	return 0;
}

```