#include <bits/stdc++.h>
using namespace std;
#define int long long
#define double long double
#define pii pair<int, int>
#define MOD 20200111
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#ifdef CB
freopen("be2.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
#endif
int N, M;
cin >> N >> M;
int i0, j0;
int a[100][100];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cin >> a[i][j];
if (a[i][j] == -1) {
a[i][j] = INT_MAX;
i0 = i;
j0 = j;
}
}
}
int b[100][100];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cin >> b[i][j];
}
}
int v[100][100] {};
auto dfs = [&](auto dfs, int i, int j, int x) {
if (i < 0 || i >= N || j < 0 || j >= M || v[i][j] >= x) {
return;
}
v[i][j] = min(x, a[i][j]);
dfs(dfs, i + 1, j, v[i][j]);
dfs(dfs, i - 1, j, v[i][j]);
dfs(dfs, i, j + 1, v[i][j]);
dfs(dfs, i, j - 1, v[i][j]);
};
dfs(dfs, i0, j0, INT_MAX);
map<int, int> m;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
m[v[i][j]] += b[i][j];
}
}
int ans = 0;
for (auto p : m) {
ans = min(p.first, ans + p.second);
}
cout << ans + 1 << endl;
return 0;
}