#include <bits/stdc++.h>
#define int long long
// #define m 1000000007
// #define piii pair<pair<int,int>>
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;

void solve(){
	int n;
	cin>>n;
	int a[n],b[n];
	for(int i=0;i<n;i++){
		cin>>a[i];
		
	}
	for(int i=0;i<n;i++){
		cin>>b[i];
		
	}
	int mx1=a[0]*b[0],mx=0;
	for(int i=0;i<n;i++){
		if(a[i]>mx) mx=a[i];
		if(b[i]*mx>mx1) {mx1=b[i]*mx;
		cout<<mx1<<"\n";}
		else
			cout<<mx1<<"\n";
	}
}

int32_t main(){
	fast
	// int t;
	// cin>>t;
	// while(t--){
		solve();
		// cout<<"\n";
	// }
	return 0;
}
#include <iostream>
#include <vector>
using namespace std;

int main()
{
  int M;
  cin >> M;
  vector<int> vec(M);
  for (int i = 0; i < M; i++)
  {
    cin >> vec.at(i);
    // cout << vec.at(i) << endl;
  }

  vector<int> prime({2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47});
  uint64_t answer = -1;

  for (uint16_t i = 0; i <= 0b0111111111111111; i++)
  // uint16_t i = 0b0111111111111111;
  {
    bool c1 = true;
    // 全ての入力
    for (size_t j = 0; j < vec.size(); j++)
    {
      // 全ての素数
      int c2 = false;
      for (size_t k = 0; k < 15; k++)
      {
        if (i & 0b1 << k)
        {
          // 一つでも割り切れる
          if (vec[j] % prime[k] == 0)
          {
            c2 = true;
            break;
          }
        }
      }
      // cout << c2 << endl;
      if (!c2)
      {
        // 一つも割り切れない
        c1 = false;
        break;
      }
    }
    // 全ての入力に置いて何かしら割り切れる
    if (c1)
    {
      uint64_t kouho = 1;
      for (size_t k = 0; k < 15; k++)
      {
        if (i & 1 << k)
        {
          kouho *= prime[k];
        }
      }
      if (kouho < answer)
        answer = kouho;
    }

    // kouho *= prime[j];
    // bool tmp = true;
    // for (size_t j = 0; j < prime.size(); j++)
    // {
    //   if(prime[j]%kouho)
    // }
    // if (tmp)
  }

  cout << answer;
}