← Home
package main

import (
	"fmt"
	"sort"
)

func main() {
	var n, k int
	if _, err := fmt.Scan(&n, &k); err != nil {
		return
	}

	if k%2 == 0 && n%2 == 1 {
		fmt.Println("-1")
		return
	}

	var q int
	for q = 1; q <= 500; q++ {
		if q*k < n {
			continue
		}
		if (q*k-n)%2 != 0 {
			continue
		}
		maxC := q
		if q%2 == 0 {
			maxC = q - 1
		}
		if q*k <= n*maxC {
			break
		}
	}

	if q > 500 {
		fmt.Println("-1")
		return
	}

	c := make([]int, n)
	for i := 0; i < n; i++ {
		c[i] = 1
	}

	rem := (q*k - n) / 2
	maxC := q
	if q%2 == 0 {
		maxC = q - 1
	}

	for i := 0; i < n && rem > 0; i++ {
		canAdd := (maxC - 1) / 2
		if rem < canAdd {
			canAdd = rem
		}
		c[i] += canAdd * 2
		rem -= canAdd
	}

	type Element struct {
		id    int
		count int
	}
	elements := make([]Element, n)
	for i := 0; i < n; i++ {
		elements[i] = Element{id: i + 1, count: c[i]}
	}

	totalXor := 0
	for step := 0; step < q; step++ {
		sort.Slice(elements, func(i, j int) bool {
			return elements[i].count > elements[j].count
		})

		fmt.Print("?")
		for i := 0; i < k; i++ {
			fmt.Printf(" %d", elements[i].id)
			elements[i].count--
		}
		fmt.Println()

		var xor int
		fmt.Scan(&xor)
		totalXor ^= xor
	}

	fmt.Printf("! %d\n", totalXor)
}