#include <bits/stdc++.h>
#pragma optimize(3)
using namespace std;
const long long LLMAX = 2e18;
const int MOD = 1e9 + 7;
const int MAXN = 1e6 + 10;
template <class T>
inline void read(T &DataIn) {
  DataIn = 0;
  T Flag = 0;
  char c = getchar();
  while (!isdigit(c)) {
    Flag |= c == '-';
    c = getchar();
  }
  while (isdigit(c)) {
    DataIn = DataIn * 10 + c - '0';
    c = getchar();
  }
  DataIn = Flag ? -DataIn : DataIn;
}
template <class T>
inline void write(T DataOut, char EndChar = '\n') {
  T lenth = 0, number[30];
  if (DataOut == 0) {
    putchar(48);
    return;
  }
  while (DataOut > 0) {
    number[++lenth] = DataOut % 10;
    DataOut /= 10;
  }
  for (int i = lenth; i >= 1; i--) putchar(number[i] + 48);
  putchar(EndChar);
}
priority_queue<int, vector<int>, less<int> > qd;
priority_queue<int, vector<int>, greater<int> > qu;
double dp1[1010][1010], dp2[1010][1010];
int main(void) {
  FILE *fin = NULL, *fout = NULL;
  ios::sync_with_stdio(false);
  cin.tie(0);
  int w, b;
  cin >> w >> b;
  double ans = 0;
  dp1[0][0] = 1;
  for (int i = 0; i <= w; i++) {
    for (int j = 0; j <= b; j++) {
      if ((i + j) % 3 == 0 && i + j < w + b) {
        double p = (b - j) * 1.0 / (w + b - i - j);
        if (b - j > 0) dp1[i][j + 1] = dp1[i][j] * p + dp2[i][j] * p;
      } else if ((i + j) % 3 == 1 && i + j + 1 < w + b) {
        double p1 =
            (w - i) * (w - i - 1) * 1.0 / (w + b - i - j) / (w + b - i - j - 1);
        if (w - i - 1 > 0) dp2[i + 2][j] = dp1[i][j] * p1 + dp2[i][j] * p1;
        double p2 =
            (w - i) * (b - j) * 1.0 / (w + b - i - j) / (w + b - i - j - 1);
        if (w - i > 0 && b - j > 0)
          dp2[i + 1][j + 1] = dp1[i][j] * p2 + dp2[i][j] * p2;
        double p3 =
            (b - j) * (b - j - 1) * 1.0 / (w + b - i - j) / (w + b - i - j - 1);
        if (b - j - 1 > 0) dp2[i][j + 2] += dp1[i][j] * p3 + dp2[i][j] * p3;
      }
    }
  }
  for (int i = 0; i <= b; i++)
    if (i % 3 == 0 && w + b > i) ans += w * dp1[0][i] / (w + b - i);
  for (int i = 0; i < w; i++)
    for (int j = 0; j <= b; j++)
      if ((i + j) % 3 == 0 && w + b > i + j)
        ans += (w - i) * dp2[i][j] / (w + b - i - j);
  cout << fixed << setprecision(9) << ans << endl;
  return 0;
}
