#include <iostream>
#include <cmath>
using namespace std;

// Возвращает длину числа a
int GetLength(int a) {
	return (a==0?1:log10(a)+1);
}

// Возвращает левую часть числа a до n-той цифры включительно
int LeftPart(int a, int n) {
	return a/pow(10, GetLength(a) - n);
}

// Возвращает правую часть числа a после n-той цифры
int RightPart(int a, int n) {
	int p = pow(10, GetLength(a) - n);
	return a%p;
}

int main() {
	int n, m, i = 0, toPrint; // Столбцы, строки, счетчик очередного числа для возведения в квадрат, текущее значение для печати
	bool haveRest = false;	// Есть ли часть числа, "отрезанная" после переноса строки
	cin >> n >> m;
	int columnsLeft = n;	// Присваиваем переменной для оставшихся свободных столбцов значения общего количества столбцов
	while(m > 0) {	// Пока есть свободные строки
		if(columnsLeft==0) {	// Если не осталось свободных столбцов
			m--;	// Уменьшаем на 1 количество свободных строк
			if(m > 0)	// Если свободные строки еще остались, переносим курсор на новую строку
				cout << endl;
			columnsLeft = n;	// Восстанавливаем число оставшихся столбцов
			haveRest = false;	// "Отрезанной" части числа нет
		} else {
			i = (haveRest?i:++i);	// Увеличиваем i на 1, только если нет "отрезанной" части
			toPrint = (haveRest?toPrint:i*i); // Присваиваем toPrint значение очередного квадата, только если нет "отрезанной" части
			if(GetLength(toPrint) <= columnsLeft) {	// Если хватает свободных столбцов для печати числа в toPrint
				cout << toPrint;	// Печатаем значение toPrint
				columnsLeft -= GetLength(toPrint);	// Обновляем количество свободных столбцов
				haveRest = false;	// "Отрезанной" части числа нет
			} else {
				cout << LeftPart(toPrint, columnsLeft);	// Печатаем левую часть числа в toPrint, чтобы заполнить все оставшиеся свободные столбцы
				toPrint = RightPart(toPrint, columnsLeft);	// Присваиваем toPrint значение его ненапечатанной части
				m--;	// Уменьшаем на 1 количество свободных строк
				if(m > 0)	// Если свободные строки еще остались, переносим курсор на новую строку
					cout << endl;
				columnsLeft = n;	// Восстанавливаем число оставшихся столбцов
				haveRest = true;	// "Отрезанная" часть числа есть
			}
		}
	}
	return 0;
}