#include<bits/stdc++.h>
using namespace std;
#define N 1005
int n,m,ans=INT_MIN;
int A[N],B[N],dp[N][N],presum[N][N];
void caculate()
{
memset(dp,0,sizeof(dp));
memset(presum,0,sizeof(presum));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
dp[i][j]=A[i]*B[j];
if(i>1&&j>1)
{
dp[i][j]=max(A[i]*B[j],dp[i-1][j-1] + A[i]*B[j]);
}
ans=max(ans,dp[i][j]);
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",A+i);
for(int i=1;i<=m;i++) scanf("%d",B+i);
caculate();
for(int i=1;i<=n/2;i++) swap(A[i],A[n+1-i]);
caculate();
printf("%d\n",ans);
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBOIDEwMDUKaW50IG4sbSxhbnM9SU5UX01JTjsKaW50IEFbTl0sQltOXSxkcFtOXVtOXSxwcmVzdW1bTl1bTl07CnZvaWQgY2FjdWxhdGUoKQp7CiAgICBtZW1zZXQoZHAsMCxzaXplb2YoZHApKTsKICAgIG1lbXNldChwcmVzdW0sMCxzaXplb2YocHJlc3VtKSk7CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykKICAgIHsKICAgICAgICBmb3IoaW50IGo9MTtqPD1tO2orKykKICAgICAgICB7CiAgICAgICAgICAgIGRwW2ldW2pdPUFbaV0qQltqXTsKICAgICAgICAgICAgaWYoaT4xJiZqPjEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRwW2ldW2pdPW1heChBW2ldKkJbal0sZHBbaS0xXVtqLTFdICsgQVtpXSpCW2pdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhbnM9bWF4KGFucyxkcFtpXVtqXSk7CiAgICAgICAgfQogICAgfQp9CmludCBtYWluKCkKewogICAgc2NhbmYoIiVkJWQiLCZuLCZtKTsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKSBzY2FuZigiJWQiLEEraSk7CiAgICBmb3IoaW50IGk9MTtpPD1tO2krKykgc2NhbmYoIiVkIixCK2kpOwogICAgY2FjdWxhdGUoKTsKICAgIGZvcihpbnQgaT0xO2k8PW4vMjtpKyspIHN3YXAoQVtpXSxBW24rMS1pXSk7CiAgICBjYWN1bGF0ZSgpOwogICAgcHJpbnRmKCIlZFxuIixhbnMpOwp9