#include <bits/stdc++.h>
using namespace std;
void setIO(const string &name = "") {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  if (name.length()) {
    freopen((name + ".in").c_str(), "r", stdin);
    freopen((name + ".out").c_str(), "w", stdout);
  }
}
template <typename T>
void read(vector<T> &a) {
  for (auto &x : a) cin >> x;
}
template <typename T>
void read(vector<T> &a, long long n) {
  a.resize(n);
  for (auto &x : a) cin >> x;
}
template <typename T>
void print(vector<T> &a) {
  for (const auto &x : a) cout << x << ' ';
  cout << '\n';
}
void MOD(long long &x) {
  x %= 1000000007;
  if (x < 0) x += 1000000007;
}
template <class T, class U>
ostream &operator<<(ostream &out, const pair<T, U> &v) {
  out << "(";
  out << v.first << "," << v.second;
  return out << ")";
}
template <class T>
ostream &operator<<(ostream &out, const vector<T> &v) {
  out << "[";
  for (auto(i) = 0; i < (long long)(v).size(); i++) {
    if (i) out << ", ";
    out << v[i];
  }
  return out << "]";
}
template <typename T>
void __f(const char *name, T &&arg1) {
  cerr << name << " : " << arg1 << '\n';
}
template <typename T, typename... U>
void __f(const char *names, T &&arg1, U &&...args) {
  const char *comma = strchr(names + 1, ',');
  cerr.write(names, comma - names) << " : " << arg1 << " | ";
  __f(comma + 1, args...);
}
long long gcd(long long a, long long b) { return !a ? b : gcd(b % a, a); }
using ld = long double;
ld ans = 0;
ld dp[1002][1002][2];
ld f(long long w, long long b, bool p) {
  if (w == 0) {
    return !p;
  }
  if (b == 0) {
    return p;
  }
  if (dp[w][b][p] != -1) return dp[w][b][p];
  ld res = 0;
  ld white = ld(w) / (ld(w) + ld(b));
  ld black = ld(b) / (ld(w) + ld(b));
  if (p) {
    res += white + black * f(w, b - 1, false);
  } else {
    { res += black * (ld(w) / (ld(w) + ld(b) - 1)) * f(w - 1, b - 1, true); }
    if (b > 1) {
      res += black * ((ld(b) - 1) / (ld(w) + ld(b) - 1)) * f(w, b - 2, true);
    }
  }
  dp[w][b][p] = res;
  return res;
}
int32_t main() {
  setIO();
  long long w, b;
  cin >> w >> b;
  for (auto(i) = 0; i < w + 1; i++) {
    for (auto(j) = 0; j < b + 1; j++) {
      dp[i][j][0] = -1;
      dp[i][j][1] = -1;
    }
  }
  printf("%.12Lf\n", f(w, b, true));
  return 0;
}
