unittest
{
	assert( [ "5 2" ].parse.expand.solve == 7 );
	assert( [ "10 0" ].parse.expand.solve == 100 );
	assert( [ "31415 9265" ].parse.expand.solve == 287927211 );
}



import std.algorithm;
import std.conv;
import std.range;
import std.stdio;
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 == 0 ) return n ^^ 2;
	
	n++;		// 半開区間のほうがやりやすい
	auto ans = 0L;
	for( auto b = k + 1; b < n; b++ )
	{
		// ( 0 <= a < n - n % b ) かつ ( k <= a % b ) が当てはまる a の数を計算
		ans += n / b * ( b - k );
		
		// ( n - n % b <= a < n ) かつ ( k <= a % b ) が当てはまる a の数を計算
		ans += max( 0L, n % b - k );
	}
	return ans;
}
