Problem: There is a polyline going through points (0, 0) – (x, x) – (2x, 0) – (3x, x) – (4x, 0) – ... - (2kx, 0) – (2kx + x, x) – .... 

We know that the polyline passes through the point (a, b). Find minimum positive value x such that it is true or determine that there is no such x.

Input

Only one line containing two positive integers a and b (1 ≤ a, b ≤ 109).

Output

Output the only line containing the answer. Your answer will be considered correct if its relative or absolute error doesn't exceed 10 - 9. If there is no such x then output  - 1 as the answer.

Examples

Input

3 1


Output

1.000000000000


Input

1 3


Output

-1


Input

4 1


Output

1.250000000000

Note

You can see following graphs for sample 1 and sample 3. 

<image> <image>

Solution (in JAVA):

Solution:
import java.io.*;
import java.util.*;

public class C320A
{

private static StringTokenizer st;
    
    public static void nextLine(BufferedReader br) throws IOException
    {
        st = new StringTokenizer(br.readLine());
    }
    
    public static int nextInt()
    {
        return Integer.parseInt(st.nextToken());
    }
    
    public static String next()
    {
        return st.nextToken();
    }
    
    public static long nextLong()
    {
        return Long.parseLong(st.nextToken());
    }

    public static double nextDouble()
    {
        return Double.parseDouble(st.nextToken());
    }
    
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        nextLine(br);
        int a = nextInt();
        int b = nextInt();
        
        if (a < b)
        {
            System.out.println(-1);
            return;
        }
        if (a == b)
        {
            System.out.println(a);
            return;
        }
        
        double eps = 0.00000000001;
        long left = 1;
        long right = (long)Math.ceil((double)a / (double)b);
        double x;
        /*
        while (left < right)
        {
            long mid = (left + right + 1) / 2;
            
            if (mid % 2 == 0)
            {
                x = (double)(a-b) / mid;
            }
            else
            {
                x = (double)(a+b)/(mid + 1);
            }
            if (x > b) 
            {
                right = mid - 1;
            }
            else
            {
                left = mid;
            }
        }
        if (left % 2 == 0)
        {
            x = (double)(a-b) / left;
        }
        else
        {
            x = (double)(a+b)/(left + 1);
        }
        */
        
        long bounces = (long)Math.ceil((double)a / (double)b);
        //double x;
        while (true)
        {
            if (bounces % 2 == 0)
            {
                x = (double)(a-b) / bounces;
            }
            else
            {
                x = (double)(a+b)/(bounces + 1);
            }
            if (x >= b) break;
            else bounces--;
        }
        if (bounces == 0)
        {
            System.out.println(-1);
        }
        else
        {
            System.out.format("%.10f\n", x);
        }
    }

}