import sys #input = sys.stdin.readline #input = sys.stdin.buffer.readline #文字列はダメ #sys.setrecursionlimit(1000000) #import bisect #import itertools #import random #from heapq import heapify, heappop, heappush from collections import defaultdict #from collections import deque #import copy import math #from functools import lru_cache #@lru_cache(maxsize=None) MOD = pow(10,9) + 7 #MOD = 998244353 #dx = [1,0,-1,0] #dy = [0,1,0,-1] #dx8 = [1,1,0,-1,-1,-1,0,1] #dy8 = [0,1,1,1,0,-1,-1,-1] def make_divisors(n): lower_divisors , upper_divisors = [], [] i = 1 while i*i <= n: if n % i == 0: lower_divisors.append(i) if i != n // i: upper_divisors.append(n//i) i += 1 return lower_divisors + upper_divisors[::-1] def main(): N,H = map(int,input().split()) TN = N dic = defaultdict(int) for i in range(2,100000): while TN%i == 0: TN //= i dic[i] += 1 yakusu_list = make_divisors(N)[:-1] #print(dic) # # 2以外の素因数 # mx = max(list(dic.keys())) Flag = False if H >= N//H: Flag = True W = H H = N//H else: W = N//H #print(H,W) #print(yakusu_list) ans = [[-1]*W for _ in range(H)] idx = 0 while yakusu_list[-1] >= W: tate = yakusu_list[-1]//W for i in range(tate): for j in range(W): ans[idx][j] = yakusu_list[-1] idx += 1 yakusu_list.pop() idx = 0 while yakusu_list: v = yakusu_list.pop() for i in range(v): ans[-1][idx] = v idx += 1 #print(ans) if Flag: tans = [[-1]*H for _ in range(W)] ans,tans = tans,ans #print(tans) for i in range(H): for j in range(W): ans[j][i] = tans[i][j] #print(ans) for ret in ans: print(*ret) if __name__ == '__main__': main()