#include<bits/stdc++.h> usingnamespace std; #define int long long int n, m; vector<int> musieve(int n){ vector<int> primes, mu(n + 1); vector<bool> vis(n + 1, 0); mu[0] = 0; mu[1] = 1; for (int i = 2; i <= n; i++) { if (!vis[i]) { mu[i] = -1; primes.push_back(i); } for (int j = 0; j < primes.size() && i * primes[j] <= n; j++) { vis[i * primes[j]] = 1; if (i % primes[j]) { mu[i * primes[j]] = -mu[i]; } else { mu[i * primes[j]] = 0; break; } } } return mu; } signedmain(){ cin >> n >> m; if (n > m) { swap(n, m); } auto mu = musieve(m); function<int(int)> f = [&](int x) -> int { return2 * x - 1; }; vector<int> g(m + 1, 0); for (int i = 1; i <= m; i++) { for (int j = 1; j * i <= m; j++) { g[j * i] += f(j) * mu[i]; } } for (int i = 2; i <= m; i++) { g[i] += g[i - 1]; } int ans = 0; int l = 1; while (l <= n) { int d1 = n / l; int r1 = n / d1; int d2 = m / l; int r2 = m / d2; int r = min(r1, r2); ans += (g[r] - g[l - 1]) * (n / l) * (m / l); l = r + 1; } cout << ans; return0; }