# Codeforces Round #320 (Div. 2)C. A Problem about Polyline

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
inputCopy
3 1
outputCopy
1.000000000000
inputCopy
1 3
outputCopy
-1
inputCopy
4 1
outputCopy
1.250000000000

/* ***********************************************
Author        :ACagain
Created Time  :2018/4/16 15:14:12
File Name     :4_16.cpp
************************************************ */

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <stack>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <queue>
#include <set>
#include <map>
using namespace std;

#define lson o<<1,l,m
#define rson o<<1|1,m+1,r
#define pii pair<int,int>
#define mp make_pair
#define ll long long
#define INF 0x3f3f3f3f
const double eps=0.000000001;
struct p
{
double x,y;
};
double operator * (p a,p b)
{
return a.x*b.y-a.y*b.x;
}
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int x,y;
cin>>x>>y;
if(x<y)
cout<<-1<<endl;
else if(x==y)
printf("%.12f\n",double(x));
else
{
int tmp=x/y;
if(tmp%2==0)
tmp--;
p a,b;
double ans,mid,l=y,r=2*y;
while(r-l>eps)
{
mid=(l+r)/2;
//cout<<l<<' '<<r<<' '<<mid<<endl;
a.x=x-tmp*mid;
a.y=y-mid;
b.x=mid;
b.y=-mid;
ans=mid;
if(a*b<0)
l=mid;
else if(a*b>eps)
r=mid;
else
{
break;
}
}
printf("%.12f\n",ans);
}
return 0;
}