#include <iostream>
using namespace std;
/*
给定一个整数n和m个不同的质数P1,P2,,Pm。
请你求出1~n中能被P1,P2,……,pm中的至少一个数整除的整数有多少个。
输入格式
第一行包含整数n和m。
第二行包含m个质数。
输出格式
输出一个整数,表示满足条件的整数的个数。
数据范围
1<m≤16,
1≤n,pi≤ 10^9
*/
typedef long long LL;
const int M = 20;
int n, m;
int p[M];
int main()
{
cin >> n >> m;
for (int i = 0; i < m; i++)
{
cin >> p[i];
}
int res = 0;
for (int i = 1; i < (1 << m); i++)
{
// 用i的二进制数代表所选质数,如输入4个质数,则 0101 表示将第0和第2个质数相乘的项且取用质数个数为偶数,res -= n / (当前质数乘积)
int num = 1; // t表示当前质数乘积
int cnt = 0; // 表示当前 i对应二进制数 1的个数
// 遍历二进制数每一位
for (int j = 0; j < m; j++)
{
if (i >> j & 1 == 1)
{
cnt++; // 计数+1
// 如果乘完时质数乘积已经大于n,则n/num必为0,没有再继续算的必要
if ((LL)num * p[j] > n)
{
num = -1; // 记为-1
break;
}
else
{
num *= p[j];
}
}
}
// num不大于n
if (num != -1)
{
if (cnt % 2)
{
res += n / num;
}
else
{
res -= n / num;
}
}
}
cout << res;
return 0;
}