#include <bits/stdc++.h>
using std::cerr;
using std::endl;
const int N = 51, lim = 50;
struct Matrix {
  double mat[N][N];
  Matrix() { memset(mat, 0, sizeof(mat)); }
  inline friend Matrix operator*(const Matrix &a, const Matrix &b) {
    Matrix ret;
    for (int i = 0; i < N; ++i)
      for (int k = 0; k < N; ++k)
        for (int j = 0; j < N; ++j) ret.mat[i][j] += a.mat[i][k] * b.mat[k][j];
    return ret;
  }
};
int n;
double p;
double A[N][N], B[N][N];
double f[N][N];
inline Matrix fpow(Matrix x, int y) {
  Matrix ret = x;
  for (--y; y; y >>= 1, x = x * x)
    if (y & 1) ret = ret * x;
  return ret;
}
int main() {
  std::cin >> n >> p;
  p = p * 1e-9;
  A[1][1] = p, A[1][2] = B[1][2] = 1 - p;
  for (int i = 2; i <= lim; ++i) {
    A[i][1] = p, A[i][2] = B[i][2] = 1 - p;
    for (int j = 2; j <= lim; ++j) {
      A[i][j] += A[i - 1][j - 1] * A[i][j - 1];
      B[i][j] += A[i - 1][j - 1] * B[i][j - 1];
    }
  }
  for (int i = lim; i; --i) {
    for (int j = 1; j <= lim; ++j) {
      A[i][j] *= 1 - A[i - 1][j];
      B[i][j] *= 1 - A[i - 1][j];
    }
  }
  f[1][1] = 1, f[1][2] = 2;
  for (int i = 2; i <= lim; ++i) {
    for (int j = 2; j <= lim; ++j) {
      double tmp = 0;
      for (int k = 1; k < j; ++k) {
        f[i][j] += f[i - 1][k] * A[i - 1][k];
        tmp += A[i - 1][k];
      }
      f[i][j] /= tmp;
      f[i][j] += j;
    }
    double tmp = 0;
    for (int k = 2; k <= lim; ++k) {
      f[i][1] += f[i - 1][k] * B[i - 1][k];
      tmp += B[i - 1][k];
    }
    f[i][1] /= tmp;
    f[i][1] += 1;
  }
  if (n <= lim) {
    double tmp = 0;
    for (int i = 1; i <= n + 1; ++i) tmp += f[n][i] * A[n][i];
    printf("%.12lf\n", tmp);
    return 0;
  }
  Matrix S, T;
  for (int i = 2; i <= lim; ++i) {
    double tmp = 0;
    for (int j = 1; j < i; ++j) {
      T.mat[j][i] += A[lim][j];
      tmp += A[lim][j];
    }
    for (int j = 1; j < i; ++j) T.mat[j][i] /= tmp;
    T.mat[0][i] = i;
  }
  double tmp = 0;
  for (int i = 2; i <= lim; ++i) {
    T.mat[i][1] += B[lim][i];
    tmp += B[lim][i];
  }
  for (int i = 2; i <= lim; ++i) T.mat[i][1] /= tmp;
  T.mat[0][1] = 1;
  T.mat[0][0] = 1;
  T = fpow(T, n - lim);
  for (int i = 1; i <= lim; ++i) S.mat[0][i] = f[lim][i];
  S.mat[0][0] = 1;
  S = S * T;
  tmp = 0;
  for (int i = 1; i <= lim; ++i) tmp += S.mat[0][i] * A[lim][i];
  printf("%.12lf\n", tmp);
  return 0;
}
