#include <stdio.h>

int bitcount(unsigned int n) {
	n=((n & 0xAAAAAAAA)>>1)+(n & 0x55555555);
	n=((n & 0xCCCCCCCC)>>2)+(n & 0x33333333);
	n=((n & 0xF0F0F0F0)>>4)+(n & 0x0F0F0F0F);
	n=((n & 0xFF00FF00)>>8)+(n & 0x00FF00FF);
	n=((n & 0xFFFF0000)>>16)+(n & 0x0000FFFF);
	return n;
}

long long gcd(long long a,long long b) {
	return b==0?a:gcd(b,a%b);
}

long long lcm(long long a,long long b) {
	return a/gcd(a,b)*b;
}

int main(void) {
	long long n;
	int m;
	while(scanf("%lld%d",&n,&m)==2 && (n!=0 || m!=0)) {
		long long p[20];
		long long sum=n*(n+1)/2;
		long long num=n;
		int imax=1<<m;
		int i;
		for(i=0;i<m;i++)scanf("%lld",&p[i]);
		for(i=1;i<imax;i++) {
			int bit=bitcount(i);
			long long muri=1;
			int k;
			for(k=0;k<m;k++) {
				if(i&(1<<k)) {
					muri=lcm(muri,p[k]);
					if(muri>n)break;
				}
			}
			if(bit%2==0) {
				num+=n/muri;
				sum+=(muri+(muri+muri*(n/muri-1)))*(n/muri)/2;
			} else {
				num-=n/muri;
				sum-=(muri+(muri+muri*(n/muri-1)))*(n/muri)/2;
			}
		}
		printf("%.15f\n",num==0?0:(double)sum/num);
	}
	return 0;
}