← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	const maxVal = 100050
	isPrime := make([]bool, maxVal)
	for i := 2; i < maxVal; i++ {
		isPrime[i] = true
	}
	for i := 2; i*i < maxVal; i++ {
		if isPrime[i] {
			for j := i * i; j < maxVal; j += i {
				isPrime[j] = false
			}
		}
	}
	nextPrime := make([]int, maxVal)
	last := 100003
	for i := maxVal - 1; i >= 0; i-- {
		if isPrime[i] {
			last = i
		}
		nextPrime[i] = last
	}

	in := bufio.NewReader(os.Stdin)
	n := readInt(in)
	m := readInt(in)

	rowSum := make([]int, n)
	colSum := make([]int, m)

	for i := 0; i < n; i++ {
		for j := 0; j < m; j++ {
			val := readInt(in)
			cost := nextPrime[val] - val
			rowSum[i] += cost
			colSum[j] += cost
		}
	}

	ans := rowSum[0]
	for i := 1; i < n; i++ {
		if rowSum[i] < ans {
			ans = rowSum[i]
		}
	}
	for j := 0; j < m; j++ {
		if colSum[j] < ans {
			ans = colSum[j]
		}
	}
	fmt.Println(ans)
}

func readInt(r *bufio.Reader) int {
	var n int
	var c byte
	for {
		c, _ = r.ReadByte()
		if c >= '0' && c <= '9' {
			break
		}
	}
	for {
		n = n*10 + int(c-'0')
		c, _ = r.ReadByte()
		if c < '0' || c > '9' {
			break
		}
	}
	return n
}