#include <bits/stdc++.h>
using namespace std;
const int MX = 2e6 + 10;
const int mod = 1e9 + 7;
const long long int inf = 1LL << 62;
int dx4[] = {0, 0, -1, 1};
int dy4[] = {1, -1, 0, 0};
int dx[] = {1, 1, 1, 0, 0, -1, -1, -1};
int dy[] = {1, 0, -1, 1, -1, 1, 0, -1};
string s = "", s1 = "", s2 = "", s3;
map<string, vector<long long int> > ms;
vector<string> vs;
map<long long int, vector<long long int> > mp, mp1;
priority_queue<pair<long long int, long long int> > PQ;
priority_queue<long long int> PQ1;
vector<long long int> v;
vector<long long int> v1;
vector<long long int> v3;
int len;
long long int m;
double check(double mid) {
  for (int i = 0; i < len; i++) {
    mid -= (mid / v3[i]);
  }
  return mid - m;
}
double binary() {
  double lb = 0.00;
  double ub = 2000000010.00;
  double mid = (lb + ub) / 2.00;
  long long int cnt = 0;
  while (cnt < 10000) {
    cnt++;
    double ans = check(mid);
    if (ans < 0.00) {
      lb = mid + 1;
    } else if (ans > 0.00) {
      ub = mid - 1;
    }
    mid = (lb + ub) / 2.00;
  }
  return mid;
}
int main() {
  long long int n, k, l, q, t, cnt = 0, sum = 0, ans = 0, mx = -inf, mn = inf,
                               a, b, c, d, e, f, g, h, i, j, x, y, z, temp,
                               temp1;
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    cin >> a;
    v.push_back(a);
  }
  for (int i = 0; i < n; i++) {
    cin >> a;
    v1.push_back(a);
  }
  v3.push_back(v[0]);
  for (int i = 1; i <= n - 1; i++) {
    v3.push_back(v1[i]);
    v3.push_back(v[i]);
  }
  v3.push_back(v1[0]);
  len = v3.size();
  double D = binary();
  double E = check(D);
  D = D - m;
  if (fabs(E) < 0.000000000001)
    printf("%.10f\n", D);
  else
    cout << -1 << endl;
  return 0;
}
