#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define fi first
#define se second
int n,m;
pair<int,int>pa[1000001];
pair<int,int>g[1001][1001];
int h[1001];
int l[1001],r[1001];
int main(){
ios::sync_with_stdio(false);cin.tie(0);
cin >> n >> m;
for(int i=1; i<=n ;i++){
for(int j=1; j<=m ;j++){
int x;cin >> x;
pa[x]={i,j};
}
}
for(int i=1; i<=n ;i++){
for(int j=1; j<=m ;j++){
int x;cin >> x;
g[i][j]={i-pa[x].fi,j-pa[x].se};
}
}
int ans=0;
for(int i=1; i<=n ;i++){
for(int j=1; j<=m ;j++){
if(i!=1 && g[i][j]!=g[i-1][j]) h[j]=1;
else h[j]++;
//cout << i << ' ' << j << ' ' << h[j] << endl;
}
vector<pair<int,int> >v;
v.push_back({0,0});
for(int j=1; j<=m ;j++){
if(g[i][j]!=g[i][j-1]){
v.clear();
v.push_back({j-1,0});
}
while(!v.empty() && v.back().se>=h[j]) v.pop_back();
l[j]=v.back().fi+1;
v.push_back({j,h[j]});
}
v.clear();v.push_back({m+1,0});
for(int j=m; j>=1 ;j--){
if(j!=m && g[i][j]!=g[i][j+1]){
v.clear();
v.push_back({j+1,0});
}
while(!v.empty() && v.back().se>=h[j]) v.pop_back();
r[j]=v.back().fi-1;
v.push_back({j,h[j]});
}
for(int j=1; j<=m ;j++){
ans=max(ans,h[j]*(r[j]-l[j]+1));
//cout << i << ' ' << j << ' ' << l[j] << ' ' << r[j] << endl;
}
}
cout << ans << '\n';
}