#include <bits/stdc++.h>
using namespace std;
const int N = 1 << 20;
const int MOD = 1e9 + 7;
priority_queue<pair<long long int, int> > pq;
vector<pair<long long int, long long int> > vp;
map<long long int, long long int> mp, mpp;
long long int dp[N];
vector<long long int> v, v1, v2;
stack<long long int> s, s1;
long long int visit[N];
struct domingo {
  int val, left, right;
} o[N];
long long int BIT[N];
long long int seg_tree[4 * N];
set<long long int> se[250];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int n, m, val, k, d, mi = 1e9, mx(0);
  long long int sum(0), flag(0), ct(0), p(0), q(0);
  string s;
  cin >> n >> m;
  int a[n], b[m];
  for (int i = 0; i < n; i++) {
    cin >> a[i];
  }
  for (int i = 0; i < m; i++) {
    cin >> b[i];
  }
  for (int i = 0; i < n; i++) {
    long long int mx = -1e18 + 5;
    for (int j = 0; j < m; j++) {
      mx = max(mx, 1LL * a[i] * b[j]);
    }
    v.push_back(mx);
  }
  sort(v.begin(), v.end());
  cout << v[v.size() - 2] << ' ';
}
