#include <bits/stdc++.h>
using namespace std;
struct M {
  double a[55][55];
  M() { memset(a, 0, sizeof(a)); }
} x, t, g;
M operator*(M a, M b) {
  M c;
  for (int i = 0, j, k; i <= 50; i++)
    for (j = 0; j <= 50; j++)
      for (k = 0; k <= 50; k++) c.a[i][j] += a.a[i][k] * b.a[k][j];
  return c;
}
M operator^(M x, int y) {
  M g;
  for (int i = 0; i <= 50; i++) g.a[i][i] = 1;
  for (; y; y >>= 1, x = x * x)
    if (y & 1) g = g * x;
  return g;
}
double a[55][55], b[55][55], f[55][55], p, q, s, ans;
int n;
int main() {
  scanf("%d%lf", &n, &p);
  p /= 1e9;
  q = 1 - p;
  for (int i = 1; i <= 50; i++)
    for (int j = 1; j <= 50; j++) {
      if (j == 1) a[i][j] += p;
      if (j == 2) a[i][j] += q, b[i][j] += q;
      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 = 50; i; i--)
    for (int j = 1; j <= 50; j++)
      a[i][j] *= (1 - a[i - 1][j]), b[i][j] *= (1 - a[i - 1][j]);
  for (int i = 1; i <= 50; i++) f[1][i] = i;
  for (int i = 2; i <= 50; i++)
    for (int j = 1; j <= 50; j++) {
      if (j == 1)
        for (int k = 2; k <= 50; k++)
          s += b[i - 1][k], f[i][j] += f[i - 1][k] * b[i - 1][k];
      else
        for (int k = 1; k < j; k++)
          s += a[i - 1][k], f[i][j] += f[i - 1][k] * a[i - 1][k];
      f[i][j] /= s;
      f[i][j] += j;
      s = 0;
    }
  t.a[0][0] = 1;
  for (int i = 1; i <= 50; i++) t.a[0][i] = i;
  s = 0;
  for (int i = 2; i <= 50; i++) s += b[50][i];
  for (int i = 2; i <= 50; i++) t.a[i][1] += b[50][i] / s;
  for (int j = 2; j <= 50; j++) {
    s = 0;
    for (int i = 1; i < j; i++) s += a[50][i];
    for (int i = 1; i < j; i++) t.a[i][j] += a[50][i] / s;
  }
  if (n > 50) {
    memcpy(x.a[0], f[50], sizeof(f[50]));
    x.a[0][0] = 1;
    g = x * (t ^ (n - 50));
  } else
    memcpy(g.a[0], f[n], sizeof(f[n]));
  for (int i = 1; i <= 50; i++) ans += g.a[0][i] * a[min(50, n)][i];
  printf("%.15lf\n", ans);
}
