#include<iostream>
using namespace std;
int n,m;
int d[1001];
int c[1001];
int dp[1002][1001];
int dp_hiroudo(int i,int j){
  if(i==n){
    return 0;
  }else if(dp[i][j]==-1){
    dp[i][j]=min(dp_hiroudo(i+1,j+1)+d[i]*c[j],dp_hiroudo(i,j+1));
  }
  return dp[i][j];
}
int main(){
  cin >>n>>m;
  for(int i=0;i<n;i++)cin >>d[i];
  for(int i=0;i<m;i++)cin >>c[i];
  for(int i=0;i<1002;i++){
    for(int j=0;j<1001;j++){
      if(n-i>m-j)dp[i][j]=1000000000;
      else dp[i][j]=-1;
    }
  }
  dp_hiroudo(0,0);
  cout <<dp[0][0]<<endl;
  return 0;
}