#include <bits/stdc++.h>
using namespace std;
inline int read(register int a = 0, register int b = 1,
                register char ch = getchar()) {
  while (ch < '0' || ch > '9') b = ch == '-' ? -1 : 1, ch = getchar();
  while (ch >= '0' && ch <= '9')
    a = (a << 3) + (a << 1) + (ch ^ 48), ch = getchar();
  return a * b;
}
const int M = 50;
double a[60][60], b[60][60], dp[60][60], T[60][60], A[60], B[60][60];
inline void mulA() {
  for (int j = 0; j <= M; j++)
    for (int k = T[0][j] = 0; k <= M; k++) T[0][j] += A[k] * B[k][j];
  for (int j = 0; j <= M; j++) A[j] = T[0][j];
}
inline void mulB() {
  for (int i = 0; i <= M; i++)
    for (int j = 0; j <= M; j++)
      for (int k = T[i][j] = 0; k <= M; k++) T[i][j] += B[i][k] * B[k][j];
  for (int i = 0; i <= M; i++)
    for (int j = 0; j <= M; j++) B[i][j] = T[i][j];
}
int main() {
  const int n = read();
  double p = (1e-9) * read();
  a[1][1] = p;
  a[1][2] = b[1][2] = 1 - p;
  for (int i = 2; i <= M; i++) {
    a[i][1] = p;
    a[i][2] = b[i][2] = 1 - p;
    for (int j = 2; j <= M; 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 = M; i; i--)
    for (int j = M; j; j--)
      a[i][j] *= 1 - a[i - 1][j], b[i][j] *= 1 - a[i - 1][j];
  dp[1][1] = 1;
  dp[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++)
        tmp += a[i - 1][k], dp[i][j] += a[i - 1][k] * dp[i - 1][k];
      dp[i][j] = dp[i][j] / tmp + j;
    }
    double tmp = 0;
    for (int k = 2; k <= M; k++)
      tmp += b[i - 1][k], dp[i][1] += b[i - 1][k] * dp[i - 1][k];
    dp[i][1] = dp[i][1] / tmp + 1;
  }
  if (n <= M) {
    double ans = 0;
    for (int i = 1; i <= n + 1; i++) ans += a[n][i] * dp[n][i];
    printf("%.12lf\n", ans);
    return 0;
  }
  A[0] = B[0][0] = B[0][1] = 1;
  for (int i = 1; i <= M; i++) A[i] = dp[M][i];
  for (int i = 2; i <= M; i++) {
    double tmp = 0;
    for (int j = 1; j < i; j++) B[j][i] += a[M][j], tmp += a[M][j];
    for (int j = 1; j < i; j++) B[j][i] /= tmp;
    B[0][i] = i;
  }
  double tmp = 0;
  for (int j = 2; j <= M; j++) B[j][1] += b[M][j], tmp += b[M][j];
  for (int j = 2; j <= M; j++) B[j][1] /= tmp;
  for (int i = n - 50; i; i >>= 1, mulB())
    if (i & 1) mulA();
  double ans = 0;
  for (int i = 1; i <= M; i++) ans += a[M][i] * A[i];
  printf("%.12lf\n", ans);
}
