#include <bits/stdc++.h>
using namespace std;
const int N = 60, M = 55;
struct Matrix {
  double v[N][N];
  Matrix() { memset(v, 0, sizeof(v)); }
  double *operator[](size_t x) { return v[x]; }
  Matrix operator*(const Matrix &a) {
    Matrix ret;
    for (int i = 0; i <= M; i++)
      for (int j = 0; j <= M; j++)
        for (int k = 0; k <= M; k++) ret.v[i][j] += v[i][k] * a.v[k][j];
    return ret;
  }
} s, t;
double p, a[N][N], b[N][N], f[N][N];
int n, tt;
void qpow(int kk) {
  while (kk) {
    if (kk & 1) s = s * t;
    t = t * t;
    kk >>= 1;
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> tt;
  p = tt * 1e-9;
  a[1][1] = p;
  a[1][2] = 1 - p;
  b[1][2] = 1 - p;
  for (int i = 2; i <= M; i++) {
    a[i][1] = p;
    a[i][2] = 1 - p;
    b[i][2] = 1 - p;
    for (int j = 2; j <= M; j++)
      a[i][j] += a[i][j - 1] * a[i - 1][j - 1],
          b[i][j] += b[i][j - 1] * a[i - 1][j - 1];
  }
  for (int i = M; i > 0; --i)
    for (int j = 1; j <= M; 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 <= M; i++) {
    for (int j = 2; j <= M; 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] = f[i][j] / tmp + j;
    }
    double tmp = 0;
    for (int k = 2; k <= M; k++)
      f[i][1] += f[i - 1][k] * b[i - 1][k], tmp += b[i - 1][k];
    f[i][1] = f[i][1] / tmp + 1;
  }
  if (n <= M) {
    double ans = 0;
    for (int i = 1; i <= n + 1; i++) ans += f[n][i] * a[n][i];
    printf("%.12lf\n", ans);
    return 0;
  }
  s[0][0] = t[0][0] = 1;
  for (int i = 2; i <= M; i++) {
    double tmp = 0;
    for (int j = 1; j < i; j++) t[j][i] += a[M][j], tmp += a[M][j];
    for (int j = 1; j < i; j++) t[j][i] /= tmp;
    t[0][i] = i;
  }
  double tmp = 0;
  for (int i = 2; i <= M; i++) t[i][1] += b[M][i], tmp += b[M][i];
  for (int i = 2; i <= M; i++) t[i][1] /= tmp;
  t[0][1] = 1;
  for (int i = 1; i <= M; i++) s[0][i] = f[M][i];
  qpow(n - M);
  double ans = 0;
  for (int i = 1; i <= M; i++) ans += s[0][i] * a[M][i];
  printf("%.12lf\n", ans);
  return 0;
}
