#include <bits/stdc++.h>
using namespace std;
inline int Int() {
  int x;
  scanf("%d", &x);
  return x;
}
inline long Long() {
  long x;
  scanf("%ld", &x);
  return x;
}
inline long long LLong() {
  long long x;
  scanf("%lld", &x);
  return x;
}
inline float Float() {
  float x;
  scanf("%f", &x);
  return x;
}
inline double Double() {
  double x;
  scanf("%lf", &x);
  return x;
}
inline pair<int, int> Pair() {
  pair<int, int> p;
  scanf("%d %d", &p.first, &p.second);
  return p;
}
void Char(char *x) { scanf("%s", x); }
void pI(int x) { printf("%d", x); }
void pL(long x) { printf("%ld", x); }
void pLL(long long x) { printf("%lld", x); }
void pUL(unsigned long long x) { printf("%llu", x); }
void pF(float x) { printf("%f", x); }
void pD(double x) { printf("%f", x); }
void pS(char x[]) { printf("%s", x); }
int dx8[] = {0, 0, 1, 1, 1, -1, -1, -1};
int dy8[] = {1, -1, 1, -1, 0, 0, -1, 1};
const double PI = acos(-1.0);
const double EPS = (double)1e-6;
const int MOD = (int)1e9 + 7;
const int maxn = 1005;
const int LOGN = 20;
int a[maxn], b[maxn];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  int n, m;
  cin >> n >> m;
  for (int i = 1; i <= (n); i++) cin >> a[i];
  for (int i = 1; i <= (n); i++) cin >> b[i];
  double lo = 0, hi = 1e9;
  int step = 0, done = 0;
  double ans = (double)1e9;
  while (step <= 300 && lo <= hi) {
    step++;
    double mid = (lo + hi) / 2.0;
    double fuel = mid;
    int ok = 1;
    for (int i = 1; i <= (n); i++) {
      fuel -= (m + fuel) * 1.0 / (a[i] * 1.0);
      fuel -= (m + fuel) * 1.0 / (b[i] * 1.0);
      if (fuel < 0) {
        ok = 0;
        break;
      }
    }
    if (ok) {
      ans = min(mid, ans);
      done = 1;
      hi = mid;
    } else
      lo = mid;
  }
  if (done)
    cout << fixed << setprecision(10) << ans << "\n";
  else
    cout << "-1\n";
  return 0;
}
