#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; void findPrime(int N, vector& isPrime) { isPrime.assign(N+1, true); isPrime[0] = isPrime[1] = false; for(int i=2; i*i<=N; i++){ if(isPrime[i]){ for(int j=i; i*j<=N; j++){ isPrime[i*j] = false; } } } } int main() { int m, n; cin >> m >> n; vector c(n); for(int i=0; i> c[i]; vector dp(m+1, -1); dp[m] = 0; for(int x=m; x>0; --x){ if(dp[x] == -1) continue; for(int i=0; i= 0) dp[y] = max(dp[y], dp[x] + 1); } } vector isPrime; findPrime(m, isPrime); int sum = 0; int ans = 0; for(int i=0; i<=m; ++i){ if(dp[i] != -1){ if(isPrime[i]) sum += dp[i]; ans = max(ans, dp[i]); } } ans += sum; cout << ans << endl; return 0; }