#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <iostream>
using namespace std;
inline int gi(){
char tmp=getchar();int ans=0;
while(!isdigit(tmp)) tmp=getchar();
while(isdigit(tmp)){
ans = ans * 10 + tmp - '0';
tmp = getchar();
}
return ans;
}
const int N = 1500;
double F[N][N];
double Dfs(int a,int b){
if(a<0 || b<0) return 0.0;
if(!a && !b) return 0.0;
if(!a) return 1.0;
if(!b) return 0.0;
if(F[a][b]) return F[a][b];
int i=a,j=b;
double c1 = 1.0 * j / (1.0 * i + j);
double c3=0,c4=0;
if(i+j == 2)
return F[a][b]=c1; // black or white
c3 = 1.0*i/(i+j) * (i-1)/(i+j-1) * (i-2)/(i+j-2) * Dfs(i-3,j);
c4 = 1.0 * i/(i+j) * (i-1)/(i+j-1) * j/(i+j-2) * Dfs(i-2,j-1);
return F[a][b] = double(c1 + c3 + c4);
}
signed main()
{
int a,b;
a=gi(),b=gi();
printf("%.9lf",Dfs(b,a));
return 0;
}