#include <bits/stdc++.h> 
using namespace std;

typedef long long ll;

#define rep(a,b,c) for(int a=b,a##end=c;a<=a##end;++a)
#define drep(a,b,c) for(int a=b,a##end=c;a>=a##end;--a)


char IO;
int rd(){
	int s=0,f=0;
	while(IO=getchar(),IO<'0'||IO>'9')if(IO=='-')f=1;
	do s=(s<<1)+(s<<3)+(IO^'0');
	while(IO=getchar(),IO>='0'&&IO<='9');
	return f?-s:s;
}

const int N=1e5+10,P=1e9+7;

int n,m;
int a[N];
int cnt;
int dp[110][N];
int main(){
	n=rd(),m=rd();
	int now=n;
	a[cnt=1]=n;
	while(now>1){
		now--;
		int l=1,r=n,res=-1;
		while(l<=r){
			int mid=(l+r)>>1;
			if(n/mid<=now) r=mid-1,res=mid;
			else l=mid+1;
		}
		a[++cnt]=now=n/res;
	}
	sort(a+1,a+cnt+1);
	rep(i,1,cnt) dp[1][i]=a[i]-a[i-1];
	rep(i,2,m){
		int s=0;
		rep(j,1,cnt){
			(s+=dp[i-1][j])%=P;
			dp[i][cnt-j+1]=1ll*(a[cnt-j+1]-a[cnt-j])*s%P;
		}
		//rep(j,1,cnt) cout<<dp[i][j]<<endl;
	}
	ll ans=0;
	rep(i,1,cnt) (ans+=dp[m][i])%=P;
	printf("%lld\n",ans);
}







### Prompt

Create a solution in Cpp for 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;

#define rep(a,b,c) for(int a=b,a##end=c;a<=a##end;++a)
#define drep(a,b,c) for(int a=b,a##end=c;a>=a##end;--a)


char IO;
int rd(){
	int s=0,f=0;
	while(IO=getchar(),IO<'0'||IO>'9')if(IO=='-')f=1;
	do s=(s<<1)+(s<<3)+(IO^'0');
	while(IO=getchar(),IO>='0'&&IO<='9');
	return f?-s:s;
}

const int N=1e5+10,P=1e9+7;

int n,m;
int a[N];
int cnt;
int dp[110][N];
int main(){
	n=rd(),m=rd();
	int now=n;
	a[cnt=1]=n;
	while(now>1){
		now--;
		int l=1,r=n,res=-1;
		while(l<=r){
			int mid=(l+r)>>1;
			if(n/mid<=now) r=mid-1,res=mid;
			else l=mid+1;
		}
		a[++cnt]=now=n/res;
	}
	sort(a+1,a+cnt+1);
	rep(i,1,cnt) dp[1][i]=a[i]-a[i-1];
	rep(i,2,m){
		int s=0;
		rep(j,1,cnt){
			(s+=dp[i-1][j])%=P;
			dp[i][cnt-j+1]=1ll*(a[cnt-j+1]-a[cnt-j])*s%P;
		}
		//rep(j,1,cnt) cout<<dp[i][j]<<endl;
	}
	ll ans=0;
	rep(i,1,cnt) (ans+=dp[m][i])%=P;
	printf("%lld\n",ans);
}







```