#include <bits/stdc++.h>
using namespace std;
#define FOR(i, N) for(int i = 0; i < N; i++)
#define FOR1e(i, N) for(int i = 1; i <= N; i++)
#define REP(i, M, N) for(int i = M; i < N; i++)
#define REPe(i, M, N) for(int i = M; i <= N; i++)
#define all(s) s.begin(), s.end()
#define gt(s) getline(cin, s)
#define ms(a, v) memset(a, v, sizeof a)
#define mp make_pair
typedef long long ll;
typedef pair< int , int > pii;
typedef vector< int > vi;
const int oo = 1 << 30 ;
const int MAX = 1e5 + 1 ;
const int MOD = 1e9 + 7 ;
int dr[ ] = { 0 , - 1 , 0 , 1 } ;
int dc[ ] = { 1 , 0 , - 1 , 0 } ;
inline int Pow( int b, int p) { if ( ! p) return 1 ; int sq = Pow( b, p >> 1 ) ; sq * = sq; if ( p & 1 ) sq * = b; return sq; }
inline int gcd( int a, int b) { if ( ! a) return b; return gcd( b % a, a) ; }
inline string toString( int x) { stringstream SS; SS << x; return SS.str ( ) ; }
int n, k;
int dp[ 101 ] [ MAX] ;
int solve( int i, int prev) {
if ( i == n)
return 1 ;
int & ret = dp[ i] [ prev] ;
if ( ret ! = - 1 )
return ret;
ret = 0 ;
if ( ! i) {
FOR1e( j, k) {
ret = ( ret % MOD + solve( i + 1 , j) % MOD) % MOD;
}
}
else {
bool b = 0 ;
FOR1e( j, k) {
if ( j >= prev || prev % j ! = 0 ) {
ret = ( ret % MOD + solve( i + 1 , j) % MOD) % MOD;
b = 1 ;
}
}
if ( ! b)
return ret = 0 ;
}
return ret;
}
class DivFreed2 {
public :
int count( int N, int K) {
n = N; k = K;
ms( dp, - 1 ) ;
return solve( 0 , MAX - 1 ) ;
}
} ;
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBGT1IoaSwgTikgZm9yKGludCBpID0gMDsgaSA8IE47IGkrKykKI2RlZmluZSBGT1IxZShpLCBOKSBmb3IoaW50IGkgPSAxOyBpIDw9IE47IGkrKykKI2RlZmluZSBSRVAoaSwgTSwgTikgZm9yKGludCBpID0gTTsgaSA8IE47IGkrKykKI2RlZmluZSBSRVBlKGksIE0sIE4pIGZvcihpbnQgaSA9IE07IGkgPD0gTjsgaSsrKQojZGVmaW5lIGFsbChzKSBzLmJlZ2luKCksIHMuZW5kKCkKI2RlZmluZSBndChzKSBnZXRsaW5lKGNpbiwgcykKI2RlZmluZSBtcyhhLCB2KSBtZW1zZXQoYSwgdiwgc2l6ZW9mIGEpCiNkZWZpbmUgbXAgbWFrZV9wYWlyCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiBwYWlyPGludCwgaW50PiBwaWk7CnR5cGVkZWYgdmVjdG9yPGludD4gdmk7Cgpjb25zdCBpbnQgb28gPSAxIDw8IDMwOwpjb25zdCBpbnQgTUFYID0gMWU1ICsgMTsKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7CgppbnQgZHJbXSA9IHsgMCwgLTEsIDAsIDEgfTsKaW50IGRjW10gPSB7IDEsIDAsIC0xLCAwIH07CgppbmxpbmUgaW50IFBvdyhpbnQgYiwgaW50IHApIHsgaWYgKCFwKSByZXR1cm4gMTsgaW50IHNxID0gUG93KGIsIHAgPj4gMSk7IHNxICo9IHNxOyBpZiAocCAmIDEpIHNxICo9IGI7IHJldHVybiBzcTsgfQppbmxpbmUgaW50IGdjZChpbnQgYSwgaW50IGIpIHsgaWYgKCFhKSByZXR1cm4gYjsgcmV0dXJuIGdjZChiICUgYSwgYSk7IH0KaW5saW5lIHN0cmluZyB0b1N0cmluZyhpbnQgeCkgeyBzdHJpbmdzdHJlYW0gU1M7IFNTIDw8IHg7IHJldHVybiBTUy5zdHIoKTsgfQoKaW50IG4sIGs7CmludCBkcFsxMDFdW01BWF07CgppbnQgc29sdmUoaW50IGksIGludCBwcmV2KXsKCWlmIChpID09IG4pCgkJcmV0dXJuIDE7CgkKCWludCAmcmV0ID0gZHBbaV1bcHJldl07CglpZiAocmV0ICE9IC0xKQoJCXJldHVybiByZXQ7CgoJcmV0ID0gMDsKCglpZiAoIWkpewoJCUZPUjFlKGosIGspewoJCQlyZXQgPSAocmV0ICUgTU9EICsgc29sdmUoaSArIDEsIGopICUgTU9EKSAlIE1PRDsKCQl9Cgl9CgllbHNlewoJCWJvb2wgYiA9IDA7CgkJRk9SMWUoaiwgayl7CgkJCWlmIChqID49IHByZXYgfHwgcHJldiAlIGogIT0gMCl7CgkJCQlyZXQgPSAocmV0ICUgTU9EICsgc29sdmUoaSArIDEsIGopICUgTU9EKSAlIE1PRDsKCQkJCWIgPSAxOwoJCQl9CgkJfQoKCQlpZiAoIWIpCgkJCXJldHVybiByZXQgPSAwOwoJfQoKCXJldHVybiByZXQ7Cn0KCmNsYXNzIERpdkZyZWVkMiB7CnB1YmxpYzoKCWludCBjb3VudChpbnQgTiwgaW50IEspIHsKCQluID0gTjsgayA9IEs7CgkJbXMoZHAsIC0xKTsKCgkJcmV0dXJuIHNvbHZlKDAsIE1BWCAtIDEpOwoJfQp9Ow==