#include <bits/stdc++.h>
template <typename T, typename U>
static inline void amin(T &x, U y) {
  if (y < x) x = y;
}
template <typename T, typename U>
static inline void amax(T &x, U y) {
  if (x < y) x = y;
}
using namespace std;
const int N = 1e6;
int p[N];
void solve() {
  long long int n, m, i, j, ans = INT_MAX;
  cin >> n >> m;
  int a[n][m];
  for (i = 0; i < n; i++)
    for (j = 0; j < m; j++) cin >> a[i][j];
  fill(p, p + N, 1);
  p[1] = 0;
  for (i = 2; i * i <= N; i++) {
    if (p[i]) {
      for (j = i * i; j <= N; j += i) p[j] = 0;
    }
  }
  set<int> s;
  for (i = 1; i < N; i++)
    if (p[i]) s.insert(i);
  for (i = 0; i < n; i++) {
    long long int sum = 0;
    for (j = 0; j < m; j++) {
      if (s.find(a[i][j]) == s.end()) {
        auto n = *s.upper_bound(a[i][j]);
        sum += n - a[i][j];
      }
    }
    amin(ans, sum);
  }
  for (j = 0; j < m; j++) {
    long long int sum = 0;
    for (i = 0; i < n; i++) {
      if (s.find(a[i][j]) == s.end()) {
        auto n = *s.upper_bound(a[i][j]);
        sum += n - a[i][j];
      }
    }
    amin(ans, sum);
  }
  cout << ans << '\n';
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
