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

long long dp[2222][2222];

vector <int> primes;

void f(int n)
{
	vector <bool> b(n+1,true);
	b[0]=b[1]=false;
	for(int i=0;i<b.size();i++)
	{
		if(b[i])
		{
			for(int j=i*i;j<b.size();j+=i)
				b[j]=false;
		}
	}
	for(int i=0;i<b.size();i++)
		if(b[i])
			primes.push_back(i);
}

vector < pair< map <int,int>,vector <int> > > v(2001);
vector <vector <int> > w(2001);

void numb(int k,int y)
{
	if(y==v[k].second.size()-1)
	{
		int z=v[k].first[v[k].second[y]];
		int x=w[k].size();
		int q;
		for(int i=1;i<=z;i++)
		{
			q=pow(v[k].second[y],i);
			for(int j=0;j<x;j++)
			{
				w[k].push_back(q*w[k][j]);
			}
		}
	}
	else
	{
		int z=v[k].first[v[k].second[y]];
		int x=w[k].size();
		int q;
		for(int i=1;i<=z;i++)
		{
			q=pow(v[k].second[y],i);
			for(int j=0;j<x;j++)
			{
				w[k].push_back(q*w[k][j]);
			}
		}
		numb(k,y+1);
	}
	
}

long long ans(int n,int k)
{
	if(dp[n][k]!=-1)
		return dp[n][k];
	if(k==1)
		return dp[n][k]=1;
	long long an=0;
	for(int i=0;i<w[n].size();i++)
	{
		an+=ans(n/w[n][i],k-1);
		an%=1000000007;
	}
	return dp[n][k]=an;
}

int main() 
{
	f(50);
	int y;
	int n,k;
	cin>>n>>k;
	/*Find prime factorization*/
	for(int i=2;i<=2000;i++)
	{
		y=i;
		for(int j=0;j<primes.size()&&primes[j]*primes[j]<=y;j++)
		{
			if(i%primes[j]==0)
			{
				v[i].second.push_back(primes[j]);
				while(y%primes[j]==0)
				{
					y/=primes[j];
					v[i].first[primes[j]]++;
				}
			}
		}
		if(y!=1)
		{
			v[i].second.push_back(y);
			v[i].first[y]++;
		}
	}
	/*generate factors as per prime factors*/
	w[1].push_back(1);
	for(int i=2;i<=2000;i++)
	{
		w[i].push_back(1);
		numb(i,0);
	}
	for(int i=0;i<=n;i++)
	{
		for(int j=0;j<=k;j++)
			dp[i][j]=-1;
	}
	/*answer is sum of dp[i][k] values for 1<=i<=n */
	long long as=0;
	for(int i=1;i<=n;i++)
	{
		as+=ans(i,k);
		as%=1000000007;
	}
	cout<<as;
	return 0;
}