// scan tuple
let scan1 f = stdin.ReadLine() |> f
let scan2 f = stdin.ReadLine().Split() |> Array.map f |> (fun a -> (a.[0], a.[1]))
let scan3 f = stdin.ReadLine().Split() |> Array.map f |> (fun a -> (a.[0], a.[1], a.[2]))
let scan4 f = stdin.ReadLine().Split() |> Array.map f |> (fun a -> (a.[0], a.[1], a.[2], a.[3]))
// scan vec and matrix (using Array)
let scanVecH f = stdin.ReadLine().Split() |> Array.map f
let scanVecV f n = [| for i in 1..n -> stdin.ReadLine() |> f |]
let scanMatrix f n = [| for i in 1..n -> stdin.ReadLine().Split() |> Array.map f |]
let scanCharMatrix n = [| for i in 1..n -> stdin.ReadLine().ToCharArray() |]
// vec tools
let transpose (m:'a [][]) = 
  let h,w = Array.length m, Array.length m.[0]
  [| for i in 0..w-1 -> [|0..h-1|] |> Array.map (fun j -> m.[j].[i]) |]

let n,k = scan2 int

// a + b , b+c, c+a がkの倍数
// A+B=0 A+C=0 B+C=0 を解く
// B = -A, C=-A で決まる。よって 2A = 0 でなければならない 
// つまり、2a が kの倍数となるようにa を任意に定め
// それぞれの a に対して b, c を -A となるものを選べばよい

// もう少しmathを続けてもいいけどこの辺で力業でいってもOKそう

seq { 1..n }
|> Seq.filter (fun i -> 2 * i % k = 0) // aを求める
|> Seq.map (fun a ->
    let bnum = [1..n] |> List.filter (fun b -> (a + b) % k = 0) |> List.length
    bnum * bnum)
|> Seq.sum
|> printfn "%d"
