//package com.company;
import java.io.*;
import java.util.*;
int size[];
static int e9 = 1000000007;
long max1
= Long.
MIN_VALUE; long min1
= Long.
MAX_VALUE; long fib[][];
static class FastReader {
public FastReader() {
}
while (st == null || !st.hasMoreElements()) {
try {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
}
long nextLong() {
return Long.
parseLong(next
()); }
double nextDouble() {
return Double.
parseDouble(next
()); }
try {
str = br.readLine();
e.printStackTrace();
}
return str;
}
}
int parent[];
int rank[];
ArrayList<ArrayList<Integer>> arrayLists;
ArrayList<Integer> arr[];
long fib1[][];
long r[];
int n;
int m;
long co=0;
long size1[];
long v[];
new Thread(null,
new Main
(),
"Main",
1<<28).
start(); }
public void run(){
// FastReader scanner = new FastReader();
Scanner scanner
= new Scanner
(System.
in);// BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));
// String s;
// System.out.println(1<<6);
// long t=scanner.nextLong();
//Solution Starts
high:while (scanner.hasNext()) {
long n=scanner.nextLong();
int m=scanner.nextInt();
long arr[]=new long[m];
long ans=0;
long ans1=1;
for (int i = 0; i < m; i++) {
long a=scanner.nextLong();
arr[i]=a;
ans1=ans1*a;
}
for (int i = 0; i < m; i++) {
ans=gcd(ans,arr[i]);
}
long lcm=ans1/ans;
// System.out.println(lcm);
long or=0;
for (int i = 1; i <=lcm ; i++) {
boolean w=true;
for (int j = 0; j < m; j++) {
if(i%arr[j]==0){
w=false;
break;
}
}
if(w){
or++;
}
}
long u=n/lcm;
or=or*u;
long y=u*lcm;
for (long i = y+1; i <n; i++) {
boolean w=true;
for (int j = 0; j < m; j++) {
if(i%arr[j]==0){
w=false;
break;
}
}
if(w){
or++;
}
}
printWriter.println(or);
}
printWriter.flush();
}
//Solution Ends
static long mod=1_000_000_007;
public long mul(long a, long b) {
// System.out.println(a+" "+b);
return ((a)%mod*(b)%mod);
}
public long fact(int x) {
long ans=1;
for (int i=2; i<=x; i++) ans=mul(ans, i);
return ans;
}
public long fastPow(long base, long exp) {
if (exp==0) return 1;
long half=fastPow(base, exp/2);
if (exp%2==0) return mul(half, half);
return mul(half, mul(half, base));
}
public long modInv(long x) {
return fastPow(x, mod-2);
}
public long nCk(int n, int k) {
return mul(fact(n), mul(modInv(fact(k)), modInv(fact(n-k))));
}
public void parent(int n){
parent=new int[n+1];
size=new int[n+1];
rank=new int[n+1];
for (int i = 0; i <=n; i++) {
parent[i]=i;
rank[i]=0;
// size[i]=1;
}
}
public void union(int i,int j){
int root1=find(i);
int root2=find(j);
// if(root1 != root2) {
// parent[root2] = root1;
//// sz[a] += sz[b];
// }
if(root1==root2){
return;
}
if(rank[root1]>rank[root2]){
parent[root2]=root1;
size[root1]+=size[root2];
}
else if(rank[root1]<rank[root2]){
parent[root1]=root2;
size[root2]+=size[root1];
}
else{
parent[root2]=root1;
rank[root1]+=1;
size[root1]+=size[root2];
}
}
public int find(int p){
if(parent[p]!=p){
if(parent[p]==-1){
return parent[p];
}
parent[p]=find(parent[p]);
}
return parent[p];
}
public double dist(double x1,double y1,double x2,double y2){
double e=(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);
return e1;
}
public void make(int p){
parent[p]=p;
rank[p]=1;
}
public void sort(int[] a, int n) {
for (int i = 0; i < n; i++) {
int j = rand.nextInt(i + 1);
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
public long gcd(long a,long b){
if(b==0){
return a;
}
return gcd(b,a%b);
}
// public void dfs(ArrayList<Integer> arrayList){
// for (int i = 0; i < arrayList.size(); i++) {
// if(v1[arrayList.get(i)]==false){
// v1[arrayList.get(i)]=true;
// dfs(arrayLists.get(i));
// }
// }
// }
public double fact(double h){
double sum=1;
while(h>=1){
sum=(sum%e9)*(h%e9);
h--;
}
return sum%e9;
}
public long primef(double r){
long c=0;
long ans=1;
while(r%2==0){
c++;
r=r/2;
}
if(c>0){
ans*=2;
}
c=0;
// System.out.println(ans+" "+r);
for (int i
= 3; i
<=Math.
sqrt(r
) ;i
+=2) { while(r%i==0){
// System.out.println(i);
c++;
r=r/i;
}
if(c>0){
ans*=i;
}
c=0;
}
if(r>2){
ans*=r;
}
return ans;
}
public long divisor(double r,long n,long k){
long c=0;
// if(n==3)
// System.out.println(r+" "+n+" "+k+" "+"l");
for (int i
=2; i
<=Math.
sqrt(r
)&&i
<k
&&i
<n
; i
++) { if(r%i==0){
if(r/i==i){
c++;
}
else{
if(r/i<n){
c+=2;
}else{
c++;
}
}
}
}
return c;
}
}
class Pair {
int x;
int y;
int z;
public Pair(int x,int y) {
this.x = x;
this.y = y;
// this.z=z;
}
// @Override
// public int hashCode() {
// int hash = 37;
// return this.x * hash + this.y;
// }
//
// @Override
// public boolean equals(Object o1) {
// if (o1 == null || o1.getClass() != this.getClass()) {
// return false;
// }
// Pair o = (Pair) o1;
// if (o.x == this.x && o.y == this.y) {
// return true;
// }
// return false;
// }
}
class Sorting implements Comparator<Pair> {
public int compare(Pair p1, Pair p2) {
// if(p1.y==p2.y){
// return Long.compare(p1.x,p2.x);
// }else {
return Long.
compare(p1.
x, p2.
x); // }
}
}
class Edge{
int s=0;
int d=0;
int c=0;
public Edge(int s,int d,int c){
this.s=s;
this.d=d;
this.c=c;
}
}