fun main(args: Array<String>) {
    val (n, k) = readLine()!!.split(" ").map { it.toInt() }

    // n, k は max 10^5
    val pV = 1.0 / n

    var pWin = 0.0
    for ( i in 1 until n + 1){
        pWin += probWin(i, k)
    }

    print(pV * pWin)
}

fun probWin(start: Int, boundary: Int): Double {
    // 2 を最低何回かけるかを求め て　確率を出す
    // 10^5 < 2^17 で すぐに計算が終わるので工夫する必要もない

    var minSeq = boundary / start.toDouble()

    var i = 0
    while(minSeq > 1.0) {
        minSeq /= 2.0
        i += 1
    }

    return Math.pow(0.5, i.toDouble())
}