#ifdef _WIN32 # define LL "%I64d" #else # define LL "%Ld" #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define null NULL #define mp make_pair #define pb(a) push_back(a) #define sz(a) ((int)(a).size()) #define all(a) a.begin() , a.end() #define fi first #define se second #define relaxMin(a , b) (a) = min((a),(b)) #define relaxMax(a , b) (a) = max((a),(b)) #define SQR(a) ((a)*(a)) typedef vector vi; typedef pair pii; typedef long long ll; const int MOD = 1E9 + 7; void AddTo(int& to, int w){ to += w; if(to >= MOD) to -= MOD; } bool IsPrime(int w){ if(w == 1) return false; for(int i = 2;i * i <= w;++i) if(w % i == 0) return false; return true; } int dp[10010]; int main(){ freopen("scourge.in", "r", stdin); freopen("scourge.out", "w", stdout); int n, m; scanf("%d%d", &n, &m); dp[0] = 1; for(int i = 2;i < m;++i) if(IsPrime(i)){ for(int s = 0;s <= n;++s) if(s - i >= 0) AddTo(dp[s], dp[s - i]); } cout << dp[n] % MOD << '\n'; return 0; }