int na, nb;
int ipt[MAXN], gcd[MAXN], bp[MAXN];
void solve(int& n, int v)
{
if (binary_search(bp, bp + nb, v))
n--;
else
n++;
}
int fun(int n)
{
int ret = 0;
for (int i = 2; i * i <= n; i++)//这里使用 i <= n / i的话会超时...无奈
{
while (n % i == 0)
{
solve(ret, i);
n /= i;
}
}
if (n > 1)
solve(ret, n);
return ret;
}
int main()
{
// freopen("in.txt", "r", stdin);
while (~RII(na, nb))
{
int ans = 0, used = 1, t;
gcd[0] = 0;
FE(i, 1, na)
{
RI(ipt[i]);
gcd[i] = __gcd(gcd[i - 1], ipt[i]);
}
REP(i, nb) RI(bp[i]);
sort(bp, bp + nb);
FE(i, 1, na)
ans += fun(ipt[i]);
FED(i, na, 1)
{
if ((t = fun(gcd[i] / used)) < 0)
{
ans -= t * i;
used = gcd[i];
}
}
cout << ans << endl;
}
return 0;
}