#include using namespace std; typedef long long ll; typedef pair P; struct edge{long long to,cost;}; const int inf = 1 << 27; const long long INF = 1LL << 60; const int COMBMAX = 1001001; const long long MOD = 1000000007; #define rep(i,n) for(int i = 0; i < (n); ++i) #define eachdo(v, e) for(const auto& e : (v)) #define all(v) (v).begin(), (v).end() #define lower_index(v, e) (long long)distance((v).begin(), lower_bound((v).begin(), (v).end(), e)) #define upper_index(v, e) (long long)distance((v).begin(), upper_bound((v).begin(), (v).end(), e)) long long mpow(long long a, long long n, long long mod = MOD){long long res = 1; while(n > 0){if(n & 1)res = res * a % mod; a = a * a % mod; n >>= 1;} return res;} void yn(bool j){cout << (j ? "Yes" : "No") << endl; return;} template void pt(Head&& head){cout << head << endl; return;} template void pt(Head&& head, Tail&&... tail){cout << head << " "; pt(forward(tail)...);} template void debug(T v){rep(i, v.size()) cout << v[i] << " " ; cout << endl;} template void debug2(T v){rep(i, v.size()){rep(j, v[i].size()) cout << v[i][j] << " " ; cout << endl;}} template long long bcount(T1 v, T2 a){return upper_index(v, a) - lower_index(v, a);} template inline bool chmin(T1 &a, T2 b){if(a > b){a = b; return true;} return false;} template inline bool chmax(T1 &a, T2 b){if(a < b){a = b; return true;} return false;} int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); cout << fixed << setprecision(15); double P, Q; cin >> P >> Q; double l = 1, r = INF; double m; rep(_, 200){ m = (l + r) / 2; // pt(l, r, m); if (m * m < P + Q * m * log2(m)) l = m; else r = m; } pt(m); }