#include <bits/stdc++.h>
using namespace std;
#define pii pair <int, int>
const int maxn = (int)1e3 + 1, max_ = (int)1e5 + 1, INF = (int)1e9;
int n, m;
vector < vector <int> > a(maxn + 1, vector <int> (maxn + 1));
vector < vector <int> > d(maxn + 1, vector <int> (maxn + 1, INF));
vector <int> ans(max_ + 10, 0);
int dx[] = {1, 0}, dy[] = {0, 1};
void sieve()
{
for (int i = 2; i <= max_; i++)
{
for (int j = i; j <= max_; j += i)
{
ans[j]++;
}
}
}
void dijkstra(int i, int j)
{
d[i][j] = ans[a[i][j]];
priority_queue <pair <pii, int>, vector < pair <pii, int> >, greater < pair <pii, int> >> pq;
pq.push({{i, j}, ans[a[i][j]]});
while (!pq.empty())
{
int x = pq.top().first.first, y = pq.top().first.second;
int dis = pq.top().second;
pq.pop();
if (dis != d[x][y]) continue;
for (int i = 0; i < 2; i++)
{
int x_ = x + dx[i], y_ = y + dy[i];
if (x_ >= 1 && x_ <= n && y_ >= 1 && y_ <= m)
{
if (d[x_][y_] > d[x][y] + ans[a[x_][y_]])
{
d[x_][y_] = d[x][y] + ans[a[x_][y_]];
pq.push({{x_, y_}, d[x_][y_]});
}
}
}
}
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("CHIPHI.INP", "r"))
{
freopen("CHIPHI.INP", "r", stdin);
freopen("CHIPHI.out", "w", stdout);
}
int t; cin >> t;
sieve();
while (t--)
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cin >> a[i][j];
}
}
dijkstra(1, 1);
cout << d[n][m] << endl;
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIHBpaSBwYWlyIDxpbnQsIGludD4KY29uc3QgaW50IG1heG4gPSAoaW50KTFlMyArIDEsIG1heF8gPSAoaW50KTFlNSArIDEsIElORiA9IChpbnQpMWU5OwppbnQgbiwgbTsKdmVjdG9yIDwgdmVjdG9yIDxpbnQ+ID4gYShtYXhuICsgMSwgdmVjdG9yIDxpbnQ+IChtYXhuICsgMSkpOwp2ZWN0b3IgPCB2ZWN0b3IgPGludD4gPiBkKG1heG4gKyAxLCB2ZWN0b3IgPGludD4gKG1heG4gKyAxLCBJTkYpKTsKdmVjdG9yIDxpbnQ+IGFucyhtYXhfICsgMTAsIDApOwppbnQgZHhbXSA9IHsxLCAwfSwgZHlbXSA9IHswLCAxfTsKCnZvaWQgc2lldmUoKQp7Cglmb3IgKGludCBpID0gMjsgaSA8PSBtYXhfOyBpKyspCgl7CgkJZm9yIChpbnQgaiA9IGk7IGogPD0gbWF4XzsgaiArPSBpKQoJCXsKCQkJYW5zW2pdKys7CgkJfQoJfQp9Cgp2b2lkIGRpamtzdHJhKGludCBpLCBpbnQgaikKewoJZFtpXVtqXSA9IGFuc1thW2ldW2pdXTsKCXByaW9yaXR5X3F1ZXVlIDxwYWlyIDxwaWksIGludD4sIHZlY3RvciA8IHBhaXIgPHBpaSwgaW50PiA+LCBncmVhdGVyIDwgcGFpciA8cGlpLCBpbnQ+ID4+IHBxOwoJcHEucHVzaCh7e2ksIGp9LCBhbnNbYVtpXVtqXV19KTsKCQoJd2hpbGUgKCFwcS5lbXB0eSgpKQoJewoJCWludCB4ID0gcHEudG9wKCkuZmlyc3QuZmlyc3QsIHkgPSBwcS50b3AoKS5maXJzdC5zZWNvbmQ7CgkJaW50IGRpcyA9IHBxLnRvcCgpLnNlY29uZDsKCQlwcS5wb3AoKTsKCQlpZiAoZGlzICE9IGRbeF1beV0pIGNvbnRpbnVlOwoJCQoJCWZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKQoJCXsKCQkJaW50IHhfID0geCArIGR4W2ldLCB5XyA9IHkgKyBkeVtpXTsKCQkJaWYgKHhfID49IDEgJiYgeF8gPD0gbiAmJiB5XyA+PSAxICYmIHlfIDw9IG0pCgkJCXsKCQkJCWlmIChkW3hfXVt5X10gPiBkW3hdW3ldICsgYW5zW2FbeF9dW3lfXV0pCgkJCQl7CgkJCQkJZFt4X11beV9dID0gZFt4XVt5XSArIGFuc1thW3hfXVt5X11dOwoJCQkJCXBxLnB1c2goe3t4XywgeV99LCBkW3hfXVt5X119KTsKCQkJCX0KCQkJfQoJCX0KCX0KfQppbnQgbWFpbigpCnsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwoJCglpZiAoZm9wZW4oIkNISVBISS5JTlAiLCAiciIpKQoJewoJCWZyZW9wZW4oIkNISVBISS5JTlAiLCAiciIsIHN0ZGluKTsKCQlmcmVvcGVuKCJDSElQSEkub3V0IiwgInciLCBzdGRvdXQpOwoJfQoJCglpbnQgdDsgY2luID4+IHQ7CglzaWV2ZSgpOwoJd2hpbGUgKHQtLSkKCXsKCQljaW4gPj4gbiA+PiBtOwoJCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKCQl7CgkJCWZvciAoaW50IGogPSAxOyBqIDw9IG07IGorKykKCQkJewoJCQkJY2luID4+IGFbaV1bal07CgkJCX0KCQl9CgkJZGlqa3N0cmEoMSwgMSk7CgkJY291dCA8PCBkW25dW21dIDw8IGVuZGw7CgkJCgl9CgkKfQ==