#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define ALL(x) (x).begin(),(x).end() #define RALL(x) (x).rbegin(), (x).rend() #define rev(i,n) for(int (i)=(n-1);(i)>=0;(i)--) #define repp(i,n) for(int (i)=1;(i)<=(n);(i)++) #define rep(i,n) for(int (i)=0;(i)<(n);(i)++) #define rev(i,n) for(int (i)=(n-1);(i)>=0;(i)--) #define clr(a) memset((a), 0 ,sizeof(a)) typedef pair P; typedef vector > pii; typedef map mi; vector prime; void make_prime(int n) { prime.resize(n + 1, true); prime[0] = prime[1] = false; for(int i=2;i*i<=n;i++){ if (prime[i]) { for(int j = 0; i * (j + 2) < n; j++) prime[i * (j + 2)] = false; } } } int main(){ make_prime(101010); int M, N; cin >> M >> N; vector v(N); for(int i=0;i> v[i]; vector dp(M + 1, -1e9); dp[M]=0; for(int i=0;i=0;j--){ dp[j]=max(dp[j], dp[j + v[i]] + 1); } } int ans=0; for(int i=1;i 0 && prime[i]){ ans+=dp[i]; } } ans+= *max_element(ALL(dp)); cout << ans << endl; return 0; }