#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;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpsb25nIGxvbmcgZHBbMjIyMl1bMjIyMl07Cgp2ZWN0b3IgPGludD4gcHJpbWVzOwoKdm9pZCBmKGludCBuKQp7Cgl2ZWN0b3IgPGJvb2w+IGIobisxLHRydWUpOwoJYlswXT1iWzFdPWZhbHNlOwoJZm9yKGludCBpPTA7aTxiLnNpemUoKTtpKyspCgl7CgkJaWYoYltpXSkKCQl7CgkJCWZvcihpbnQgaj1pKmk7ajxiLnNpemUoKTtqKz1pKQoJCQkJYltqXT1mYWxzZTsKCQl9Cgl9Cglmb3IoaW50IGk9MDtpPGIuc2l6ZSgpO2krKykKCQlpZihiW2ldKQoJCQlwcmltZXMucHVzaF9iYWNrKGkpOwp9Cgp2ZWN0b3IgPCBwYWlyPCBtYXAgPGludCxpbnQ+LHZlY3RvciA8aW50PiA+ID4gdigyMDAxKTsKdmVjdG9yIDx2ZWN0b3IgPGludD4gPiB3KDIwMDEpOwoKdm9pZCBudW1iKGludCBrLGludCB5KQp7CglpZih5PT12W2tdLnNlY29uZC5zaXplKCktMSkKCXsKCQlpbnQgej12W2tdLmZpcnN0W3Zba10uc2Vjb25kW3ldXTsKCQlpbnQgeD13W2tdLnNpemUoKTsKCQlpbnQgcTsKCQlmb3IoaW50IGk9MTtpPD16O2krKykKCQl7CgkJCXE9cG93KHZba10uc2Vjb25kW3ldLGkpOwoJCQlmb3IoaW50IGo9MDtqPHg7aisrKQoJCQl7CgkJCQl3W2tdLnB1c2hfYmFjayhxKndba11bal0pOwoJCQl9CgkJfQoJfQoJZWxzZQoJewoJCWludCB6PXZba10uZmlyc3RbdltrXS5zZWNvbmRbeV1dOwoJCWludCB4PXdba10uc2l6ZSgpOwoJCWludCBxOwoJCWZvcihpbnQgaT0xO2k8PXo7aSsrKQoJCXsKCQkJcT1wb3codltrXS5zZWNvbmRbeV0saSk7CgkJCWZvcihpbnQgaj0wO2o8eDtqKyspCgkJCXsKCQkJCXdba10ucHVzaF9iYWNrKHEqd1trXVtqXSk7CgkJCX0KCQl9CgkJbnVtYihrLHkrMSk7Cgl9CgkKfQoKbG9uZyBsb25nIGFucyhpbnQgbixpbnQgaykKewoJaWYoZHBbbl1ba10hPS0xKQoJCXJldHVybiBkcFtuXVtrXTsKCWlmKGs9PTEpCgkJcmV0dXJuIGRwW25dW2tdPTE7Cglsb25nIGxvbmcgYW49MDsKCWZvcihpbnQgaT0wO2k8d1tuXS5zaXplKCk7aSsrKQoJewoJCWFuKz1hbnMobi93W25dW2ldLGstMSk7CgkJYW4lPTEwMDAwMDAwMDc7Cgl9CglyZXR1cm4gZHBbbl1ba109YW47Cn0KCmludCBtYWluKCkgCnsKCWYoNTApOwoJaW50IHk7CglpbnQgbixrOwoJY2luPj5uPj5rOwoJLypGaW5kIHByaW1lIGZhY3Rvcml6YXRpb24qLwoJZm9yKGludCBpPTI7aTw9MjAwMDtpKyspCgl7CgkJeT1pOwoJCWZvcihpbnQgaj0wO2o8cHJpbWVzLnNpemUoKSYmcHJpbWVzW2pdKnByaW1lc1tqXTw9eTtqKyspCgkJewoJCQlpZihpJXByaW1lc1tqXT09MCkKCQkJewoJCQkJdltpXS5zZWNvbmQucHVzaF9iYWNrKHByaW1lc1tqXSk7CgkJCQl3aGlsZSh5JXByaW1lc1tqXT09MCkKCQkJCXsKCQkJCQl5Lz1wcmltZXNbal07CgkJCQkJdltpXS5maXJzdFtwcmltZXNbal1dKys7CgkJCQl9CgkJCX0KCQl9CgkJaWYoeSE9MSkKCQl7CgkJCXZbaV0uc2Vjb25kLnB1c2hfYmFjayh5KTsKCQkJdltpXS5maXJzdFt5XSsrOwoJCX0KCX0KCS8qZ2VuZXJhdGUgZmFjdG9ycyBhcyBwZXIgcHJpbWUgZmFjdG9ycyovCgl3WzFdLnB1c2hfYmFjaygxKTsKCWZvcihpbnQgaT0yO2k8PTIwMDA7aSsrKQoJewoJCXdbaV0ucHVzaF9iYWNrKDEpOwoJCW51bWIoaSwwKTsKCX0KCWZvcihpbnQgaT0wO2k8PW47aSsrKQoJewoJCWZvcihpbnQgaj0wO2o8PWs7aisrKQoJCQlkcFtpXVtqXT0tMTsKCX0KCS8qYW5zd2VyIGlzIHN1bSBvZiBkcFtpXVtrXSB2YWx1ZXMgZm9yIDE8PWk8PW4gKi8KCWxvbmcgbG9uZyBhcz0wOwoJZm9yKGludCBpPTE7aTw9bjtpKyspCgl7CgkJYXMrPWFucyhpLGspOwoJCWFzJT0xMDAwMDAwMDA3OwoJfQoJY291dDw8YXM7CglyZXR1cm4gMDsKfQ==