module IntSet = Set.Make (struct
  type t = int
  let compare = compare
end)

let upper_bound x s =
  match IntSet.split x s with
  | (_, true, _) -> x
  | (s, false, _) -> IntSet.max_elt s

let () = Scanf.scanf "%d %d" @@ fun n k ->
  try
    let (_, abcs) =
      Array.fold_right (fun c (s, abcs) ->
        let a = IntSet.max_elt s in
        let s = IntSet.remove a s in
        (*
         * a + b <= c
         * b <= c - a
         *)
        let b = upper_bound (c - a) s in
        let s = IntSet.remove b s in
        (s, (a, b, c) :: abcs)) (Array.init n (( + ) (k + 2 * n))) @@
        ( IntSet.of_list @@
          Array.to_list @@
          Array.init (2 * n) (( + ) k), [] ) in
    List.iter (fun (a, b, c) -> Printf.printf "%d %d %d\n" a b c) abcs
  with Not_found -> print_endline "-1"
