#include <bits/stdc++.h>
using namespace std;
const int M = 55;
struct MAT {
  int x, y;
  double a[M][M];
} sum, w;
int n, m = 50;
double ans, p, q;
double dp[M][M], a[M][M], b[M][M];
MAT operator*(MAT a, MAT b) {
  int i, j, k;
  MAT c;
  c.x = a.x;
  c.y = b.y;
  for (i = 0; i <= a.x; i++)
    for (j = 0; j <= b.y; j++) {
      c.a[i][j] = 0;
      for (k = 0; k <= a.y; k++) c.a[i][j] += a.a[i][k] * b.a[k][j];
    }
  return c;
}
MAT quickpow(MAT x, int y) {
  MAT s;
  bool tag = 0;
  for (; y; y >>= 1, x = x * x)
    if (y & 1) {
      if (tag)
        s = s * x;
      else
        s = x, tag = 1;
    }
  return s;
}
int main() {
  int i, j, k;
  double tmp;
  scanf("%d%lf", &n, &p);
  p = p / 1000000000.0;
  q = 1.0 - p;
  for (i = 1; i <= m; i++)
    for (j = 1; j <= m; j++) {
      if (j == 1) a[i][j] = p;
      if (j == 2) a[i][j] = b[i][j] = q;
      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 (i = m; i >= 1; i--)
    for (j = 1; j <= m; j++) {
      a[i][j] *= (1.0 - a[i - 1][j]);
      b[i][j] *= (1.0 - a[i - 1][j]);
    }
  dp[1][1] = 1;
  dp[1][2] = 2;
  for (i = 2; i <= m; i++)
    for (j = 1; j <= m; j++) {
      if (j == 1) {
        tmp = 0;
        for (k = 2; k <= m; k++) {
          dp[i][j] += dp[i - 1][k] * b[i - 1][k];
          tmp += b[i - 1][k];
        }
        dp[i][j] = dp[i][j] / tmp + j;
      } else {
        tmp = 0;
        for (k = 1; k < j; k++) {
          dp[i][j] += dp[i - 1][k] * a[i - 1][k];
          tmp += a[i - 1][k];
        }
        dp[i][j] = dp[i][j] / tmp + j;
      }
    }
  if (n <= m) {
    ans = 0;
    for (i = 1; i <= n + 1; i++) ans += dp[n][i] * a[n][i];
    printf("%.6f\n", ans);
    return 0;
  }
  ans = 0;
  sum.x = 0;
  sum.y = m;
  for (i = 1; i <= m; i++) sum.a[0][i] = dp[m][i];
  sum.a[0][0] = w.a[0][0] = 1;
  w.x = w.y = m;
  for (i = 1; i <= m; i++) {
    w.a[0][i] = i;
    if (i == 1) {
      tmp = 0;
      for (j = 2; j <= m; j++) {
        w.a[j][i] += b[m][j];
        tmp += b[m][j];
      }
      for (j = 2; j <= m; j++) w.a[j][i] /= tmp;
    } else {
      tmp = 0;
      for (j = 1; j < i; j++) {
        w.a[j][i] += a[m][j];
        tmp += a[m][j];
      }
      for (j = 1; j < i; j++) w.a[j][i] /= tmp;
    }
  }
  sum = sum * quickpow(w, n - m);
  for (i = 1; i <= m; i++) ans += sum.a[0][i] * a[m][i];
  printf("%.6f\n", ans);
  return 0;
}
