#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <cassert>

using namespace std;

double volume(double L, double D, double angle) {
	double h = L * sin(angle);
	double r1 = 0.5 * D;
    double r2 = L * cos(angle) + r1;
    return h * (r1 * r1 + r1 * r2 + r2 * r2);
}

double findVsearch(double L, double D) {
	double l = 1e-6;
	double r = acos(-1.0) * 0.5;

	double t13 = 1.0 / 3.0;
	double t23 = 2.0 / 3.0;

	for (int it = 0; it < 100; ++it) {
		double c0 = l * t23 + r * t13;
		double c1 = l * t13 + r * t23;
		double v0 = volume(L, D, c0);
		double v1 = volume(L, D, c1);

		if (v0 <= v1) {
			l = c0;
		} else {
			r = c1;
		}
	}

	return volume(L, D, 0.5 * (l + r)) * acos(-1.0) / 3;	
}

double f(double x, double b, double c, double d) {
	return d + x * (c + x * (b + x));
}

vector<double> solveEQ3(double b, double c, double d) {
	vector<double> result;
	//x^3+ax^2+bx+d=0
	double l = -1;
	while (f(l, b, c, d) >= 0) l *= 2;
	double r = 1;
	while (f(r, b, c, d) <= 0) r *= 2;
	
	for (int it = 0; it < 100; ++it) {
		double m = (l + r) / 2;
		if (f(m, b, c, d) < 0)
			l = m;
		else
			r = m;
	}
	double x0 = (l + r)/2;
	result.push_back(x0);
	
	double b2 = b + x0;
	double c2 = c + x0*b2;
	double d2 = b2*b2-4*c2;
	if (d2 >= -1e9) {
		d2 = sqrt(fabs(d2));
		double x1 = (-b2-d2)/2;
		double x2 = (-b2+d2)/2;
		
		result.push_back(x1);
		result.push_back(x2);
	}
	
	for (int i = 0; i < result.size(); ++i) {
		assert(fabs(f(result[i], b, c, d) < 1e-9));
	}
	
	return result;
}

double findV(double L, double D) {
	double r1 = D/2;

	double a = 3*r1*r1;
	double b = 3*r1*L;
	double c = L*L;
	
	vector<double> x = solveEQ3(2*b/3/c, -(2*c-a)/3/c, -b/3/c);
	
	double res = 0;
	int cnt = 0;
	for (int i = 0; i < x.size(); ++i) {
		if (0 <= x[i] && x[i] <= 1) {
			++cnt;
			res = max(res, volume(L, D, acos(-1.0)/2 - asin(x[i])));
		}
	}
	assert(cnt == 1);
	return res * acos(-1.0) / 3;
}

void solve() {
	int L, D;
	cin >> L >> D;
	printf("%.10lf\n", findV(L, D));
}

int main() {
	solve();
	return 0;
}
