object Main {

  def main(args: Array[String]): Unit = {
    import scala.io.StdIn._

    val Array(n, k) = readLine().split(" ").map(_.toInt)

    // i 連続でコインが2倍になって行くと、目 * point(i) 点
    val point = (0 to 17).map(i => Math.pow(1/2.0, i))

    // 2の何乗をかければK以上になるか？
    // 必ず勝てるか　log 2 x = Math.log(x) - Math.log(2)
    val p = (1 to Math.min(n, k-1)).foldLeft(0.0) { (b, i) =>
      val x = k / i.toDouble
      val nx = Math.ceil(Math.log(x) / Math.log(2)).toInt
      b + point(nx)
    }
    // k以上の目が出る場合には常に勝利する
    // k以上の目が常に出ない場合には、
    if (n >= k) {
      println((p + (n - k + 1))/n)
    } else {
      println(p / n)
    }
  }

  // 勝つためには連続で表が出る必要がある。
  // サイコロの出る可能性がある全ての目に対して、確率を足し合わせたもの
  // サイコロのある目の出る確率は、1/可能性、*出た目を何倍すればいいか

}