# input -1
3 1
# output -1
1
2
3
# input -2
4 2
# output -2
1 2
1 3
1 4
2 1
2 3
2 4
3 1
3 2
3 4
4 1
4 2
4 3
# input -3
4 4
# output -3
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1
## 백트래킹
# 입력
N, M = map(int, input().split())
# 배열 초기화
orders = []
for i in range(M):
orders.append(0)
# 백트랙킹 함수
def back (idx,order_list) :
ord_list = order_list[:]
if(idx >= M) :
# 완성된 수열 출력
for i in range(M-1):
print(ord_list[i],end = " ")
print(ord_list[M-1])
else :
for i in range(1,N+1):
# 중복이 아닌 수에 대해서만 수열 생성
if(not i in order_list):
ord_list[idx] = i
back(idx+1,ord_list)
back(0,orders)