module Main where

import           Control.Monad
import           Control.Monad.State
import           Data.Array.IO
import           Data.Char
import           Data.Fixed
import           Data.List
import           Data.List.Split
import           Data.Ord
import qualified Data.Vector.Unboxed as V
import           Text.Printf

main :: IO ()
main = do
  [n, k] <- map read . words <$> getLine :: IO [Int]
  putStrLn $ showFixed True
    $ (/ tp n)
    $ (`execState` 0)
    $ forM_ [1 .. n]
    $ \i -> do
      let p = ceiling $ fromIntegral k / fromIntegral i
          q = f p 1
      v <- get
      put ((v + (tp 1 / tp q)) :: Pico)
  where
    f :: Int -> Int -> Int
    f p i
      | i >= p = i
      | otherwise = f p (i * 2)

    tp x = realToFrac x :: Pico
