← Home
package main

import (
	"fmt"
	"math"
)

func main() {
	var n, m int
	if _, err := fmt.Scan(&n, &m); err != nil {
		return
	}

	dp := make([]float64, m+1)
	nextDp := make([]float64, m+1)

	var compute func(L, R, optL, optR int)
	compute = func(L, R, optL, optR int) {
		if L > R {
			return
		}
		mid := (L + R) / 2
		bestY := -1
		bestVal := math.Inf(1)

		start := mid + 1
		if start < optL {
			start = optL
		}
		end := optR

		for y := start; y <= end; y++ {
			val := float64(mid)/float64(y-mid) + dp[y]
			if val < bestVal {
				bestVal = val
				bestY = y
			}
		}

		nextDp[mid] = bestVal
		if bestY == -1 {
			bestY = optL
		}

		compute(L, mid-1, optL, bestY)
		compute(mid+1, R, bestY, optR)
	}

	for k := 1; k < n; k++ {
		compute(n-k, m-k, n-k+1, m-k+1)
		for i := n - k; i <= m-k; i++ {
			dp[i] = nextDp[i]
		}
	}

	ans := math.Inf(1)
	for a1 := 1; a1 <= m-(n-1); a1++ {
		if dp[a1] < ans {
			ans = dp[a1]
		}
	}

	fmt.Printf("%.10f\n", float64(n)+2.0*ans)
}