#include <bits/stdc++.h>
using namespace std;
const int Maxn = 1000 + 100;
long double wp[Maxn][Maxn], lp[Maxn][Maxn], wd[Maxn][Maxn], ld[Maxn][Maxn];
int w, b;
bool pmark[Maxn][Maxn], dmark[Maxn][Maxn];
void input() { cin >> w >> b; }
long double dragon(int, int);
long double p(int x, int y) {
  if (y == 0)
    return 1;
  else
    return (long double)x / (long double)(y + x);
}
long double princes(int x, int y) {
  if (x < 0 || y < 0 || (x == 0 && y == 0)) return 0;
  if (pmark[x][y]) return wp[x][y];
  pmark[x][y] = true;
  if (y == 0) {
    wp[x][y] = 1;
    lp[x][y] = 0;
  } else {
    wp[x][y] = p(x, y);
    lp[x][y] = 1 - wp[x][y];
    wp[x][y] += lp[x][y] * dragon(x, y - 1);
  }
  return wp[x][y];
}
long double dragon(int x, int y) {
  if (x < 0 || y < 0 || (x == 0 && y == 0)) return 0;
  if (dmark[x][y]) return wd[x][y];
  dmark[x][y] = true;
  if (y == 0) {
    wd[x][y] = 0;
    ld[x][y] = 0;
  } else {
    ld[x][y] = 1 - p(x, y);
    wd[x][y] += (ld[x][y]) * ((1 - p(x, y - 1)) * princes(x, y - 2) +
                              (p(x, y - 1)) * princes(x - 1, y - 1));
  }
  return wd[x][y];
}
void output() {
  cout << fixed << setprecision(9) << endl;
  cout << princes(w, b) << endl;
}
int main() {
  input();
  output();
  return 0;
}
