#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 5e2 + 5;
const int MX = 1e7 + 5;
int n, m;
int a[N][N];
bool prime[MX];
void sieve() {
for (int i = 2; i < MX; i++) prime[i] = true;
for (int i = 2; i * i < MX; i++) {
if (prime[i]) {
for (int j = i * i; j < MX; j += i) prime[j] = false;
}
}
}
// Gọi d(x) = khoảng cách của x đến số nguyên tố gần nhất mà >= x
// Ta có nhận xét: d(x) <= ~230 với x <= 1e9, nên với 1 số x ta có thể trâu để tính d(x)
int d[N][N];
int sum_r[N]; // sum_r[i] = tổng d(x) của các số x có trong hàng i
int sum_c[N]; // sum_c[j] = tổng d(x) của các số x có trong cột j
void precompute() {
sieve();
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
while (!prime[a[i][j]]) {
++a[i][j];
++d[i][j];
}
sum_r[i] += d[i][j];
sum_c[j] += d[i][j];
}
}
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) cin >> a[i][j];
}
precompute();
int ans = INF;
for (int i = 1; i <= n; i++) ans = min(ans, sum_r[i]);
for (int j = 1; j <= m; j++) ans = min(ans, sum_c[j]);
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOyAgCgpjb25zdCBpbnQgSU5GID0gMWU5OyAgCmNvbnN0IGxsIExJTkYgPSAxZTE4OyAgCgpjb25zdCBpbnQgTiA9IDVlMiArIDU7IApjb25zdCBpbnQgTVggPSAxZTcgKyA1OyAKCmludCBuLCBtOyAKaW50IGFbTl1bTl07IAoKYm9vbCBwcmltZVtNWF07IAoKdm9pZCBzaWV2ZSgpIHsKCWZvciAoaW50IGkgPSAyOyBpIDwgTVg7IGkrKykgcHJpbWVbaV0gPSB0cnVlOyAgIAoKCWZvciAoaW50IGkgPSAyOyBpICogaSA8IE1YOyBpKyspIHsKCQlpZiAocHJpbWVbaV0pIHsKCQkJZm9yIChpbnQgaiA9IGkgKiBpOyBqIDwgTVg7IGogKz0gaSkgcHJpbWVbal0gPSBmYWxzZTsKCQl9Cgl9Cn0KCi8vIEfhu41pIGQoeCkgPSBraG/huqNuZyBjw6FjaCBj4bunYSB4IMSR4bq/biBz4buRIG5ndXnDqm4gdOG7kSBn4bqnbiBuaOG6pXQgbcOgID49IHggCi8vIFRhIGPDsyBuaOG6rW4geMOpdDogZCh4KSA8PSB+MjMwIHbhu5tpIHggPD0gMWU5LCBuw6puIHbhu5tpIDEgc+G7kSB4IHRhIGPDsyB0aOG7gyB0csOidSDEkeG7gyB0w61uaCBkKHgpCmludCBkW05dW05dOyAKaW50IHN1bV9yW05dOyAvLyBzdW1fcltpXSA9IHThu5VuZyBkKHgpIGPhu6dhIGPDoWMgc+G7kSB4IGPDsyB0cm9uZyBow6BuZyBpIAppbnQgc3VtX2NbTl07IC8vIHN1bV9jW2pdID0gdOG7lW5nIGQoeCkgY+G7p2EgY8OhYyBz4buRIHggY8OzIHRyb25nIGPhu5l0IGoKCnZvaWQgcHJlY29tcHV0ZSgpIHsKCXNpZXZlKCk7IAoKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewoJCWZvciAoaW50IGogPSAxOyBqIDw9IG07IGorKykgewoJCQl3aGlsZSAoIXByaW1lW2FbaV1bal1dKSB7CgkJCQkrK2FbaV1bal07IAoJCQkJKytkW2ldW2pdOyAKCQkJfQoJCQlzdW1fcltpXSArPSBkW2ldW2pdOyAKCQkJc3VtX2Nbal0gKz0gZFtpXVtqXTsgCgkJfQoJfQp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyAgCQoJY2luID4+IG4gPj4gbTsgCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKCQlmb3IgKGludCBqID0gMTsgaiA8PSBtOyBqKyspIGNpbiA+PiBhW2ldW2pdOyAKCX0KCglwcmVjb21wdXRlKCk7ICAKCglpbnQgYW5zID0gSU5GOyAKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgYW5zID0gbWluKGFucywgc3VtX3JbaV0pOyAgCglmb3IgKGludCBqID0gMTsgaiA8PSBtOyBqKyspIGFucyA9IG1pbihhbnMsIHN1bV9jW2pdKTsgCgoJY291dCA8PCBhbnMgPDwgJ1xuJzsgCn0=