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.util.*;
import java.io.*;
import java.math.*;

public class main {
    public static void main(String[] args) throws Exception {
        Reader in = new Reader(System.in);
        Writer out = new Writer(System.out);                
        Task task = new Task(in, out);
        task.solve(); in.close(); out.close();
    }
}

class Task {
    public void solve() {
        double x = in.nextDouble(), y = in.nextDouble();
        if (y > x) {
            out.println(-1);
        }
        else {
            double ans = x;
            double x1 = x - y;
            int z1 = (int)(x1 / y);
            if (z1 % 2 == 1)
                z1--;
            if (z1 > 0)
                ans = Math.min(ans, x1 / z1);
            double x2 = x + y;
            int z2 = (int)(x2 / y);
            if (z2 % 2 == 1)
                z2--;
            if (z2 > 0)
                ans = Math.min(ans, x2 / z2);
            out.println(ans);
        }
    }
    private Reader in;
    private Writer out;
    public Task(Reader input, Writer output) { in = input; out = output; }
}

class Reader {
    BufferedReader reader;
    StringTokenizer str;
    Reader(String filename) throws Exception {
        reader = new BufferedReader(new FileReader(filename));
    }
    Reader(InputStream input) throws Exception {
        reader = new BufferedReader(new InputStreamReader(input));
    }
    public String next() {
        while (str == null || str.hasMoreTokens() == false) {
            try {
                str = new StringTokenizer(reader.readLine());
            }
            catch (Exception ex) {
                throw new InputMismatchException();
            }
        }
        return str.nextToken();
    }
    public long nextLong() { return Long.parseLong(next()); }
    public int nextInt() { return Integer.parseInt(next()); }
    public double nextDouble() { return Double.parseDouble(next()); }
    public int[] intArray(final int n) { int a[] = new int[n]; for (int i = 0; i < n; i++) a[i] = nextInt(); return a; }
    public int[] intArrayOneIndexed(int n) {int a[] = new int[n + 2]; for (int i = 1; i <= n; i++) a[i] = nextInt(); return a; }
    public char[] charArray() {return next().toCharArray(); }
    public void close() throws Exception { reader.close(); }
}

class Writer extends PrintWriter {
    public Writer(OutputStream output) {
        super (output);
    }
    public Writer(String filename) throws Exception {
        super(new File(filename));
    }
    public void print(Object...objects) {
        for (int i = 0; i < objects.length; i++) {
            this.print(objects[i]);
            this.print(" ");
        }
        this.println();
    }
}