#include #include #include #include #include #include #include using namespace std; #define MAXN 100001 long long v, n, k, dp[MAXN]; bool prime[MAXN]; vector nums; void findPrimes() { for(int i = 0; i <= k; ++i) prime[i] = 1; prime[0] = prime[1] = false; prime[2] = true; for(int i=2; i <= k; i++) if(prime[i]) { for(int j=i+i; j <= k; j+=i) prime[j]=false; if (prime[i]) nums.push_back(i); } } long long solve() { v = nums.size(); dp[0] = 1; for(int i = v - 1; i >= 0; --i) for(int j = nums[i]; j <= n; ++j) { dp[j] += dp[j - nums[i]]; dp[j] %= 1000000007; } return dp[n]; } int main() { freopen("scourge.in","r",stdin); freopen("scourge.out","w",stdout); scanf("%lld%lld", &n, &k); findPrimes(); printf("%lld\n",solve()); }