#include int factorize(int n, int p[], int m[]) { int i, k; for (i = 2, k = 0; i * i <= n; i++) { if (n % i != 0) continue; p[k] = i; for (m[k] = 0; n % p[k] == 0; m[k]++, n /= p[k]); k++; } if (n > 1) { p[k] = n; m[k++] = 1; } return k; } int main() { int i, N, M, A; scanf("%d %d", &N, &M); int h, j, k, l[101], ll[101], m[101], p[101], tmp, tmpp, count[1000001] = {}; long long ans = 0, memo[1000001]; for (i = 1; i <= N; i++) memo[i] = -1; for (i = 1; i <= M; i++) { scanf("%d", &A); if (memo[A] != -1) { ans += memo[A]; continue; } else memo[A] = 0; k = factorize(A, p, m); for (j = 0, tmp = A; j < k; j++) l[j] = m[j]; while (tmp > 1) { count[tmp] = A / tmp; for (j = 0, tmpp = tmp; j < k; j++) ll[j] = l[j]; while (tmpp < A) { for (h = 0; h < k && ll[h] == m[h]; h++); if (h == k) break; for (ll[h]++, tmpp *= p[h--]; h >= 0; ll[h] = l[h], h--) { for (j = l[h]; j < m[h]; j++) tmpp /= p[h]; } count[tmp] -= count[tmpp]; } memo[A] += (long long)(tmp - 1) * count[tmp]; for (h = 0; h < k && l[h] == 0; h++); for (l[h]--, tmp /= p[h--]; h >= 0; l[h] = m[h], h--) { for (j = 0; j < m[h]; j++) tmp *= p[h]; } } ans += memo[A]; for (j = 1, l[0] = 1, tmp = p[0]; j < k; j++) l[j] = 0; while (1) { count[tmp] = 0; for (h = 0; h < k && l[h] == m[h]; h++); if (h == k) break; for (l[h]++, tmp *= p[h--]; h >= 0; l[h--] = 0) { for (j = 0; j < m[h]; j++) tmp /= p[h]; } } } printf("%lld\n", ans); fflush(stdout); return 0; }