#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
int main() {
int n, m;
std::cin >> n >> m;
std::vector<std::vector<long long>> a(
n, std::vector<long long>(m)
);
std::vector<long long> row1(n, LLONG_MAX);
std::vector<long long> row2(n, LLONG_MAX);
std::vector<long long> col1(m, LLONG_MAX);
std::vector<long long> col2(m, LLONG_MAX);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
std::cin >> a[i][j];
long long x = a[i][j];
if (x < row1[i]) {
row2[i] = row1[i];
row1[i] = x;
} else if (x < row2[i]) {
row2[i] = x;
}
if (x < col1[j]) {
col2[j] = col1[j];
col1[j] = x;
} else if (x < col2[j]) {
col2[j] = x;
}
}
}
long long ans = LLONG_MAX;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
long long x = a[i][j];
long long r = row1[i];
long long c = col1[j];
if (r == x) r = row2[i];
if (c == x) c = col2[j];
ans = std::min(ans, x + r + c);
}
}
std::cout << ans;
return 0;
}