unittest
{
	assert( [ "3 2" ].parse.expand.solve == 9 );
	assert( [ "5 3" ].parse.expand.solve == 1 );
	assert( [ "31415 9265" ].parse.expand.solve == 27 );
	assert( [ "35897 932" ].parse.expand.solve == 114191 );
}



import std.conv;
import std.range;
import std.stdio;
import std.string;
import std.typecons;

void main()
{
	stdin.byLineCopy.parse.expand.solve.writeln;
}

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto nk = input.front.split.to!( long[] );
	return tuple( nk[ 0 ], nk[ 1 ] );
}

auto solve( long n, long k )
{
	if( k % 2 == 1 )
	{
		auto p = n / k;						// kの倍数の数
		return p * p * p;
	}
	else
	{
		auto pa = n / k;					// kの倍数の数
		auto pb = n / ( k / 2 ) - pa;		// 上以外のk/2の倍数の数（kの倍数とは組み合わせられないので別計算にする）
		return pa * pa * pa + pb * pb * pb;
	}
}
