#include <bits/stdc++.h>
using namespace std;
using ll = long long int;
#define inf 1000000000000000LL
#define mod 1000000007LL
#define FOR(i,a,b) for(int i = a; i < b; i++)
const ll Mod = 1000000009LL;
const ll Base = 271LL;
struct hashed_string{
private:
string s; ll n;
vector <ll> prefix;
vector <ll> pow;
public:
hashed_string(string a){
s = a; n = a.size();
prefix.assign(n, 0);
ll sum = 0;
pow.assign(n+1, 0);
pow[0] = 1;
for (int i = 1; i <= n; i++){
pow[i] = (pow[i-1] * Base) % Mod;
}
for (int i = 0; i < n; i++){
prefix[i] = ((sum * Base) % Mod + s[i] - 'a' + 1) % Mod;
sum = prefix[i];
}
}
hashed_string(){}
ll get_hash(ll l, ll r){
ll x = prefix[r];
if (l >= 1){
l--;
x = ((x - prefix[l] * pow[r - l] % Mod) % Mod + Mod) % Mod;
}
return x;
}
};
void solve() {
ll n,m;
cin >> n >> m;
vector <string> l1( 2 * n);
for (int i = 0; i < 2 * n; i++) cin >> l1[i];
vector <hashed_string> v( 2 * n);
for (int i = 0; i < 2 * n; i++) v[i] = hashed_string(l1[i]);
auto flag = [&](ll length) -> bool{
for (int j = 0; j + length - 1 < m; j++){
set<ll> f1;
for (int i = 0; i < n; i++){
f1.insert(v[i].get_hash(j, j + length - 1));
}
bool flag = true;
for (int i = n; i < 2 * n; i++){
if (f1.find(v[i].get_hash(j, j + length - 1)) != f1.end()){
flag = false;
break;
}
}
if (flag) return true;
}
return false;
};
ll lo = 1;
ll hi = m;
while (lo != hi){
ll mid = (lo + hi) / 2;
if (flag(mid)){
hi = mid;
}
else{
lo = mid + 1;
}
}
cout << lo << "\n";
}
int main() {
freopen("cownomics.in","r",stdin);
freopen("cownomics.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll t = 1;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nIGludDsKI2RlZmluZSBpbmYgMTAwMDAwMDAwMDAwMDAwMExMCiNkZWZpbmUgbW9kIDEwMDAwMDAwMDdMTAojZGVmaW5lIEZPUihpLGEsYikgZm9yKGludCBpID0gYTsgaSA8IGI7IGkrKykKY29uc3QgbGwgTW9kID0gMTAwMDAwMDAwOUxMOwpjb25zdCBsbCBCYXNlID0gMjcxTEw7CgpzdHJ1Y3QgaGFzaGVkX3N0cmluZ3sKICAgIHByaXZhdGU6CiAgICBzdHJpbmcgczsgbGwgbjsKICAgIHZlY3RvciA8bGw+IHByZWZpeDsKICAgIHZlY3RvciA8bGw+IHBvdzsKICAgIHB1YmxpYzoKICAgIGhhc2hlZF9zdHJpbmcoc3RyaW5nIGEpewogICAgICAgIHMgPSBhOyBuID0gYS5zaXplKCk7CiAgICAgICAgcHJlZml4LmFzc2lnbihuLCAwKTsKICAgICAgICBsbCBzdW0gPSAwOwogICAgICAgIHBvdy5hc3NpZ24obisxLCAwKTsKICAgICAgICBwb3dbMF0gPSAxOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CiAgICAgICAgICAgIHBvd1tpXSA9IChwb3dbaS0xXSAqIEJhc2UpICUgTW9kOwogICAgICAgIH0KICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKyl7CiAgICAgICAgICAgIHByZWZpeFtpXSA9ICgoc3VtICogQmFzZSkgJSBNb2QgKyBzW2ldIC0gJ2EnICsgMSkgJSBNb2Q7CiAgICAgICAgICAgIHN1bSA9IHByZWZpeFtpXTsKICAgICAgICB9CiAgICB9CiAgICBoYXNoZWRfc3RyaW5nKCl7fQogICAgbGwgZ2V0X2hhc2gobGwgbCwgbGwgcil7CiAgICAgICAgbGwgeCA9IHByZWZpeFtyXTsKICAgICAgICBpZiAobCA+PSAxKXsKICAgICAgICAgICAgbC0tOwogICAgICAgICAgICB4ID0gKCh4IC0gcHJlZml4W2xdICogcG93W3IgLSBsXSAlIE1vZCkgJSBNb2QgKyBNb2QpICUgTW9kOwogICAgICAgIH0KICAgICAgICByZXR1cm4geDsKICAgIH0KfTsKdm9pZCBzb2x2ZSgpIHsKICAgIGxsIG4sbTsKICAgIGNpbiA+PiBuID4+IG07CiAgICB2ZWN0b3IgPHN0cmluZz4gbDEoIDIgKiBuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMiAqIG47IGkrKykgY2luID4+IGwxW2ldOwogICAgdmVjdG9yIDxoYXNoZWRfc3RyaW5nPiB2KCAyICogbik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDIgKiBuOyBpKyspIHZbaV0gPSBoYXNoZWRfc3RyaW5nKGwxW2ldKTsKICAgIGF1dG8gZmxhZyA9IFsmXShsbCBsZW5ndGgpIC0+IGJvb2x7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogKyBsZW5ndGggLSAxIDwgbTsgaisrKXsKICAgICAgICAgICAgc2V0PGxsPiBmMTsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspewogICAgICAgICAgICAgICAgZjEuaW5zZXJ0KHZbaV0uZ2V0X2hhc2goaiwgaiArIGxlbmd0aCAtIDEpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBib29sIGZsYWcgPSB0cnVlOwogICAgICAgICAgICBmb3IgKGludCBpID0gbjsgaSA8IDIgKiBuOyBpKyspewogICAgICAgICAgICAgICAgaWYgKGYxLmZpbmQodltpXS5nZXRfaGFzaChqLCBqICsgbGVuZ3RoIC0gMSkpICE9IGYxLmVuZCgpKXsKICAgICAgICAgICAgICAgICAgICBmbGFnID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGZsYWcpIHJldHVybiB0cnVlOyAKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIGxsIGxvID0gMTsKICAgIGxsIGhpID0gbTsKICAgIHdoaWxlIChsbyAhPSBoaSl7CiAgICAgICAgbGwgbWlkID0gKGxvICsgaGkpIC8gMjsKICAgICAgICBpZiAoZmxhZyhtaWQpKXsKICAgICAgICAgICAgaGkgPSBtaWQ7CiAgICAgICAgfSAgCiAgICAgICAgZWxzZXsKICAgICAgICAgICAgbG8gPSBtaWQgKyAxOwogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgbG8gPDwgIlxuIjsKfQoKaW50IG1haW4oKSB7CiAgICBmcmVvcGVuKCJjb3dub21pY3MuaW4iLCJyIixzdGRpbik7CiAgICBmcmVvcGVuKCJjb3dub21pY3Mub3V0IiwidyIsc3Rkb3V0KTsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgbGwgdCA9IDE7CiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==