#include <iostream>
#include <queue>
#include <stack>
#include <vector>
#include <climits>
#include <algorithm>
using namespace std;
bool origarr[25][25], newarr[25][25];
int main() {
int t, n, m, dr, dc, merr, err;
char c;
cin >> t;
while (t--) {
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> c;
origarr[i][j] = c - '0';
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> c;
newarr[i][j] = c - '0';
}
}
merr = INT_MAX;
for (int dr = -(n-1); dr < n; dr++) {
for (int dc = -(m-1); dc < m; dc++) {
err = 0;
//Calculate error for dr and dc offset
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
//If the translated new arr and original matrix have a difference add to error
if (i+dr >= 0 && i+dr < n && j+dc >= 0 && j+dc < m) {
err += abs(origarr[i][j] - newarr[i+dr][j+dc]);
}
//If original matrix has 1, but no valid translation from new matrix
// e.g if the new matrix is translated up by 1 row so there is no entry for last row
// But original matrix has 1's in last row
else if (origarr[i][j] == 1) {
err++;
}
}
}
merr = min(merr, err);
}
}
cout << merr << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxzdGFjaz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGNsaW1pdHM+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmJvb2wgb3JpZ2FyclsyNV1bMjVdLCBuZXdhcnJbMjVdWzI1XTsKCmludCBtYWluKCkgewogIGludCB0LCBuLCBtLCBkciwgZGMsIG1lcnIsIGVycjsKICBjaGFyIGM7CiAgY2luID4+IHQ7CiAgd2hpbGUgKHQtLSkgewogICAgY2luID4+IG4gPj4gbTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbTsgaisrKSB7CiAgICAgICAgY2luID4+IGM7CiAgICAgICAgb3JpZ2FycltpXVtqXSA9IGMgLSAnMCc7CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICBmb3IgKGludCBqID0gMDsgaiA8IG07IGorKykgewogICAgICAgIGNpbiA+PiBjOwogICAgICAgIG5ld2FycltpXVtqXSA9IGMgLSAnMCc7CiAgICAgIH0KICAgIH0KCgogICAgbWVyciA9IElOVF9NQVg7CiAgICBmb3IgKGludCBkciA9IC0obi0xKTsgZHIgPCBuOyBkcisrKSB7CiAgICAgIGZvciAoaW50IGRjID0gLShtLTEpOyBkYyA8IG07IGRjKyspIHsKICAgICAgICBlcnIgPSAwOwogICAgICAgIC8vQ2FsY3VsYXRlIGVycm9yIGZvciBkciBhbmQgZGMgb2Zmc2V0CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbTsgaisrKSB7CiAgICAgICAgICAJLy9JZiB0aGUgdHJhbnNsYXRlZCBuZXcgYXJyIGFuZCBvcmlnaW5hbCBtYXRyaXggaGF2ZSBhIGRpZmZlcmVuY2UgYWRkIHRvIGVycm9yCiAgICAgICAgICAgIGlmIChpK2RyID49IDAgJiYgaStkciA8IG4gJiYgaitkYyA+PSAwICYmIGorZGMgPCBtKSB7CiAgICAgICAgICAgICAgZXJyICs9IGFicyhvcmlnYXJyW2ldW2pdIC0gbmV3YXJyW2krZHJdW2orZGNdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvL0lmIG9yaWdpbmFsIG1hdHJpeCBoYXMgMSwgYnV0IG5vIHZhbGlkIHRyYW5zbGF0aW9uIGZyb20gbmV3IG1hdHJpeCAKICAgICAgICAgICAgLy8gZS5nIGlmIHRoZSBuZXcgbWF0cml4IGlzIHRyYW5zbGF0ZWQgdXAgYnkgMSByb3cgc28gdGhlcmUgaXMgbm8gZW50cnkgZm9yIGxhc3Qgcm93IAogICAgICAgICAgICAvLyBCdXQgb3JpZ2luYWwgbWF0cml4IGhhcyAxJ3MgaW4gbGFzdCByb3cKICAgICAgICAgICAgZWxzZSBpZiAob3JpZ2FycltpXVtqXSA9PSAxKSB7CiAgICAgICAgICAgICAgZXJyKys7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbWVyciA9IG1pbihtZXJyLCBlcnIpOwogICAgICB9CiAgICB9CgogICAgY291dCA8PCBtZXJyIDw8IGVuZGw7CiAgfQogIHJldHVybiAwOwp9Cg==
NQozIDMKMTAwCjAxMAowMDAKMDAwCjAxMAowMDEKNCA0CjAwMDAKMDExMAowMDAwCjAwMTEKMTEwMAowMDAwCjExMDAKMDAwMAozIDMKMTAwCjAwMAowMDEKMDAwCjAxMAowMDAKMyAzCjAwMAowMTAKMDAwCjEwMAowMDAKMDAxCjMgMwoxMTEKMDAwCjAwMAowMDEKMDAxCjAwMQ==
5
3 3
100
010
000
000
010
001
4 4
0000
0110
0000
0011
1100
0000
1100
0000
3 3
100
000
001
000
010
000
3 3
000
010
000
100
000
001
3 3
111
000
000
001
001
001