import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

/**
 * Lesson5B　以下のような、たてH cm よこ W cm の枠を描くプログラム
##########
#........#
#........#
#........#
#........#
##########

 * @author 前島佑介
 * @version 2014/12/1
 */
class Main {

	// プログラムのエントリポイント
	public static void main(String[] args) {

		try{
			//キーボードからの入力準備
			BufferedReader insBR = new BufferedReader(new InputStreamReader(System.in));

			//入力値を格納する場所を初期化
			String strLine = "";

			//入力値をint型で保存する場所
			ArrayList<String> strArray = new ArrayList<String>();

			//入力値の取得にループさせる
			while(true) {

				//1行読み込む
				strLine = insBR.readLine();

				//入力値が"0 0"だったら
				if(strLine.equals("0 0")) {

					//ループから抜ける
					break;
				}

				//入力値を保存
				strArray.add(strLine);
			}

			//ループさせる
			for(int i = 0; i < strArray.size(); i++) {

				//文字列の分割:入力値を" "で分ける
				//分けた文字列はstrLineAry[0]とstrLineAry[1]に分けられる
				String[] strLineAry = strArray.get(i).split(" ");

				//左の値
				int intNum1 = Integer.parseInt(strLineAry[0]);

				//右の値
				int intNum2 = Integer.parseInt(strLineAry[1]);

				//出力させるメソッド
				SharpPaint(intNum1, intNum2);
			}

		//例外処理
		}catch(IOException e) {

			//例外時の出力
			System.out.println(e);
		}catch(NumberFormatException e) {


			//数値以外の入力値で出力
			System.out.println("数値で入力して下さい");
		}
	}
	/**
	 * たてintNum1の分よこintNum２の分の長方形を描くプログラム
	 * 1 cm × 1cm の長方形を '#'で表す
	 * @param intNum1
	 * @param intNum2
	 */
	public static void SharpPaint(int intNum1, int intNum2) {

		//たての分　ループ
		for(int i = 0; i < intNum1; i++) {

			//よこの分　ループ
			for(int j = 0; j < intNum2; j++) {

				//近くの周りは＃
				if(
						i == 0 ||					//左辺
						j == 0 ||					//上辺
						i == intNum1 - 1 ||			//右辺
						j == intNum2 - 1	) {		//下辺
					//出力
					System.out.print("#");
				} else {
					//出力
					System.out.print(".");
				}
			}
			//改行
			System.out.println("");
		}

		//改行
		System.out.println("");

	}
} import java.io.BufferedReader; BufferedReader java.io import java.io.IOException; IOException java.io import java.io.InputStreamReader; InputStreamReader java.io import java.util.ArrayList; ArrayList java.util class Main {

	// プログラムのエントリポイント
	public static void main(String[] args) {

		try{
			//キーボードからの入力準備
			BufferedReader insBR = new BufferedReader(new InputStreamReader(System.in));

			//入力値を格納する場所を初期化
			String strLine = "";

			//入力値をint型で保存する場所
			ArrayList<String> strArray = new ArrayList<String>();

			//入力値の取得にループさせる
			while(true) {

				//1行読み込む
				strLine = insBR.readLine();

				//入力値が"0 0"だったら
				if(strLine.equals("0 0")) {

					//ループから抜ける
					break;
				}

				//入力値を保存
				strArray.add(strLine);
			}

			//ループさせる
			for(int i = 0; i < strArray.size(); i++) {

				//文字列の分割:入力値を" "で分ける
				//分けた文字列はstrLineAry[0]とstrLineAry[1]に分けられる
				String[] strLineAry = strArray.get(i).split(" ");

				//左の値
				int intNum1 = Integer.parseInt(strLineAry[0]);

				//右の値
				int intNum2 = Integer.parseInt(strLineAry[1]);

				//出力させるメソッド
				SharpPaint(intNum1, intNum2);
			}

		//例外処理
		}catch(IOException e) {

			//例外時の出力
			System.out.println(e);
		}catch(NumberFormatException e) {


			//数値以外の入力値で出力
			System.out.println("数値で入力して下さい");
		}
	}
	/**
	 * たてintNum1の分よこintNum２の分の長方形を描くプログラム
	 * 1 cm × 1cm の長方形を '#'で表す
	 * @param intNum1
	 * @param intNum2
	 */
	public static void SharpPaint(int intNum1, int intNum2) {

		//たての分　ループ
		for(int i = 0; i < intNum1; i++) {

			//よこの分　ループ
			for(int j = 0; j < intNum2; j++) {

				//近くの周りは＃
				if(
						i == 0 ||					//左辺
						j == 0 ||					//上辺
						i == intNum1 - 1 ||			//右辺
						j == intNum2 - 1	) {		//下辺
					//出力
					System.out.print("#");
				} else {
					//出力
					System.out.print(".");
				}
			}
			//改行
			System.out.println("");
		}

		//改行
		System.out.println("");

	}
} Main // プログラムのエントリポイント
	public static void main(String[] args) {

		try{
			//キーボードからの入力準備
			BufferedReader insBR = new BufferedReader(new InputStreamReader(System.in));

			//入力値を格納する場所を初期化
			String strLine = "";

			//入力値をint型で保存する場所
			ArrayList<String> strArray = new ArrayList<String>();

			//入力値の取得にループさせる
			while(true) {

				//1行読み込む
				strLine = insBR.readLine();

				//入力値が"0 0"だったら
				if(strLine.equals("0 0")) {

					//ループから抜ける
					break;
				}

				//入力値を保存
				strArray.add(strLine);
			}

			//ループさせる
			for(int i = 0; i < strArray.size(); i++) {

				//文字列の分割:入力値を" "で分ける
				//分けた文字列はstrLineAry[0]とstrLineAry[1]に分けられる
				String[] strLineAry = strArray.get(i).split(" ");

				//左の値
				int intNum1 = Integer.parseInt(strLineAry[0]);

				//右の値
				int intNum2 = Integer.parseInt(strLineAry[1]);

				//出力させるメソッド
				SharpPaint(intNum1, intNum2);
			}

		//例外処理
		}catch(IOException e) {

			//例外時の出力
			System.out.println(e);
		}catch(NumberFormatException e) {


			//数値以外の入力値で出力
			System.out.println("数値で入力して下さい");
		}
	} main {

		try{
			//キーボードからの入力準備
			BufferedReader insBR = new BufferedReader(new InputStreamReader(System.in));

			//入力値を格納する場所を初期化
			String strLine = "";

			//入力値をint型で保存する場所
			ArrayList<String> strArray = new ArrayList<String>();

			//入力値の取得にループさせる
			while(true) {

				//1行読み込む
				strLine = insBR.readLine();

				//入力値が"0 0"だったら
				if(strLine.equals("0 0")) {

					//ループから抜ける
					break;
				}

				//入力値を保存
				strArray.add(strLine);
			}

			//ループさせる
			for(int i = 0; i < strArray.size(); i++) {

				//文字列の分割:入力値を" "で分ける
				//分けた文字列はstrLineAry[0]とstrLineAry[1]に分けられる
				String[] strLineAry = strArray.get(i).split(" ");

				//左の値
				int intNum1 = Integer.parseInt(strLineAry[0]);

				//右の値
				int intNum2 = Integer.parseInt(strLineAry[1]);

				//出力させるメソッド
				SharpPaint(intNum1, intNum2);
			}

		//例外処理
		}catch(IOException e) {

			//例外時の出力
			System.out.println(e);
		}catch(NumberFormatException e) {


			//数値以外の入力値で出力
			System.out.println("数値で入力して下さい");
		}
	} try{
			//キーボードからの入力準備
			BufferedReader insBR = new BufferedReader(new InputStreamReader(System.in));

			//入力値を格納する場所を初期化
			String strLine = "";

			//入力値をint型で保存する場所
			ArrayList<String> strArray = new ArrayList<String>();

			//入力値の取得にループさせる
			while(true) {

				//1行読み込む
				strLine = insBR.readLine();

				//入力値が"0 0"だったら
				if(strLine.equals("0 0")) {

					//ループから抜ける
					break;
				}

				//入力値を保存
				strArray.add(strLine);
			}

			//ループさせる
			for(int i = 0; i < strArray.size(); i++) {

				//文字列の分割:入力値を" "で分ける
				//分けた文字列はstrLineAry[0]とstrLineAry[1]に分けられる
				String[] strLineAry = strArray.get(i).split(" ");

				//左の値
				int intNum1 = Integer.parseInt(strLineAry[0]);

				//右の値
				int intNum2 = Integer.parseInt(strLineAry[1]);

				//出力させるメソッド
				SharpPaint(intNum1, intNum2);
			}

		//例外処理
		}catch(IOException e) {

			//例外時の出力
			System.out.println(e);
		}catch(NumberFormatException e) {


			//数値以外の入力値で出力
			System.out.println("数値で入力して下さい");
		} catch(IOException e) {

			//例外時の出力
			System.out.println(e);
		} IOException e {

			//例外時の出力
			System.out.println(e);
		} System.out.println(e) System.out.println System.out System System.out e catch(NumberFormatException e) {


			//数値以外の入力値で出力
			System.out.println("数値で入力して下さい");
		} NumberFormatException e {


			//数値以外の入力値で出力
			System.out.println("数値で入力して下さい");
		} System.out.println("数値で入力して下さい") System.out.println System.out System System.out "数値で入力して下さい" {
			//キーボードからの入力準備
			BufferedReader insBR = new BufferedReader(new InputStreamReader(System.in));

			//入力値を格納する場所を初期化
			String strLine = "";

			//入力値をint型で保存する場所
			ArrayList<String> strArray = new ArrayList<String>();

			//入力値の取得にループさせる
			while(true) {

				//1行読み込む
				strLine = insBR.readLine();

				//入力値が"0 0"だったら
				if(strLine.equals("0 0")) {

					//ループから抜ける
					break;
				}

				//入力値を保存
				strArray.add(strLine);
			}

			//ループさせる
			for(int i = 0; i < strArray.size(); i++) {

				//文字列の分割:入力値を" "で分ける
				//分けた文字列はstrLineAry[0]とstrLineAry[1]に分けられる
				String[] strLineAry = strArray.get(i).split(" ");

				//左の値
				int intNum1 = Integer.parseInt(strLineAry[0]);

				//右の値
				int intNum2 = Integer.parseInt(strLineAry[1]);

				//出力させるメソッド
				SharpPaint(intNum1, intNum2);
			}

		//例外処理
		} BufferedReader insBR = new BufferedReader(new InputStreamReader(System.in)); insBR new BufferedReader(new InputStreamReader(System.in)) String strLine = ""; strLine "" ArrayList<String> strArray = new ArrayList<String>(); strArray new ArrayList<String>() while(true) {

				//1行読み込む
				strLine = insBR.readLine();

				//入力値が"0 0"だったら
				if(strLine.equals("0 0")) {

					//ループから抜ける
					break;
				}

				//入力値を保存
				strArray.add(strLine);
			} true {

				//1行読み込む
				strLine = insBR.readLine();

				//入力値が"0 0"だったら
				if(strLine.equals("0 0")) {

					//ループから抜ける
					break;
				}

				//入力値を保存
				strArray.add(strLine);
			} strLine = insBR.readLine() strLine insBR.readLine() insBR.readLine insBR if(strLine.equals("0 0")) {

					//ループから抜ける
					break;
				} strLine.equals("0 0") strLine.equals strLine "0 0" {

					//ループから抜ける
					break;
				} break; strArray.add(strLine) strArray.add strArray strLine for(int i = 0; i < strArray.size(); i++) {

				//文字列の分割:入力値を" "で分ける
				//分けた文字列はstrLineAry[0]とstrLineAry[1]に分けられる
				String[] strLineAry = strArray.get(i).split(" ");

				//左の値
				int intNum1 = Integer.parseInt(strLineAry[0]);

				//右の値
				int intNum2 = Integer.parseInt(strLineAry[1]);

				//出力させるメソッド
				SharpPaint(intNum1, intNum2);
			} int i = 0; int i = 0; i 0 i < strArray.size() i strArray.size() strArray.size strArray i++ i++ i {

				//文字列の分割:入力値を" "で分ける
				//分けた文字列はstrLineAry[0]とstrLineAry[1]に分けられる
				String[] strLineAry = strArray.get(i).split(" ");

				//左の値
				int intNum1 = Integer.parseInt(strLineAry[0]);

				//右の値
				int intNum2 = Integer.parseInt(strLineAry[1]);

				//出力させるメソッド
				SharpPaint(intNum1, intNum2);
			} {

				//文字列の分割:入力値を" "で分ける
				//分けた文字列はstrLineAry[0]とstrLineAry[1]に分けられる
				String[] strLineAry = strArray.get(i).split(" ");

				//左の値
				int intNum1 = Integer.parseInt(strLineAry[0]);

				//右の値
				int intNum2 = Integer.parseInt(strLineAry[1]);

				//出力させるメソッド
				SharpPaint(intNum1, intNum2);
			} String[] strLineAry = strArray.get(i).split(" "); strLineAry strArray.get(i).split(" ") strArray.get(i).split strArray.get(i) strArray.get strArray i " " int intNum1 = Integer.parseInt(strLineAry[0]); intNum1 Integer.parseInt(strLineAry[0]) Integer.parseInt Integer strLineAry[0] strLineAry 0 int intNum2 = Integer.parseInt(strLineAry[1]); intNum2 Integer.parseInt(strLineAry[1]) Integer.parseInt Integer strLineAry[1] strLineAry 1 SharpPaint(intNum1, intNum2) SharpPaint intNum1 intNum2 String[] args args /**
	 * たてintNum1の分よこintNum２の分の長方形を描くプログラム
	 * 1 cm × 1cm の長方形を '#'で表す
	 * @param intNum1
	 * @param intNum2
	 */
	public static void SharpPaint(int intNum1, int intNum2) {

		//たての分　ループ
		for(int i = 0; i < intNum1; i++) {

			//よこの分　ループ
			for(int j = 0; j < intNum2; j++) {

				//近くの周りは＃
				if(
						i == 0 ||					//左辺
						j == 0 ||					//上辺
						i == intNum1 - 1 ||			//右辺
						j == intNum2 - 1	) {		//下辺
					//出力
					System.out.print("#");
				} else {
					//出力
					System.out.print(".");
				}
			}
			//改行
			System.out.println("");
		}

		//改行
		System.out.println("");

	} SharpPaint {

		//たての分　ループ
		for(int i = 0; i < intNum1; i++) {

			//よこの分　ループ
			for(int j = 0; j < intNum2; j++) {

				//近くの周りは＃
				if(
						i == 0 ||					//左辺
						j == 0 ||					//上辺
						i == intNum1 - 1 ||			//右辺
						j == intNum2 - 1	) {		//下辺
					//出力
					System.out.print("#");
				} else {
					//出力
					System.out.print(".");
				}
			}
			//改行
			System.out.println("");
		}

		//改行
		System.out.println("");

	} for(int i = 0; i < intNum1; i++) {

			//よこの分　ループ
			for(int j = 0; j < intNum2; j++) {

				//近くの周りは＃
				if(
						i == 0 ||					//左辺
						j == 0 ||					//上辺
						i == intNum1 - 1 ||			//右辺
						j == intNum2 - 1	) {		//下辺
					//出力
					System.out.print("#");
				} else {
					//出力
					System.out.print(".");
				}
			}
			//改行
			System.out.println("");
		} int i = 0; int i = 0; i 0 i < intNum1 i intNum1 i++ i++ i {

			//よこの分　ループ
			for(int j = 0; j < intNum2; j++) {

				//近くの周りは＃
				if(
						i == 0 ||					//左辺
						j == 0 ||					//上辺
						i == intNum1 - 1 ||			//右辺
						j == intNum2 - 1	) {		//下辺
					//出力
					System.out.print("#");
				} else {
					//出力
					System.out.print(".");
				}
			}
			//改行
			System.out.println("");
		} {

			//よこの分　ループ
			for(int j = 0; j < intNum2; j++) {

				//近くの周りは＃
				if(
						i == 0 ||					//左辺
						j == 0 ||					//上辺
						i == intNum1 - 1 ||			//右辺
						j == intNum2 - 1	) {		//下辺
					//出力
					System.out.print("#");
				} else {
					//出力
					System.out.print(".");
				}
			}
			//改行
			System.out.println("");
		} for(int j = 0; j < intNum2; j++) {

				//近くの周りは＃
				if(
						i == 0 ||					//左辺
						j == 0 ||					//上辺
						i == intNum1 - 1 ||			//右辺
						j == intNum2 - 1	) {		//下辺
					//出力
					System.out.print("#");
				} else {
					//出力
					System.out.print(".");
				}
			} int j = 0; int j = 0; j 0 j < intNum2 j intNum2 j++ j++ j {

				//近くの周りは＃
				if(
						i == 0 ||					//左辺
						j == 0 ||					//上辺
						i == intNum1 - 1 ||			//右辺
						j == intNum2 - 1	) {		//下辺
					//出力
					System.out.print("#");
				} else {
					//出力
					System.out.print(".");
				}
			} {

				//近くの周りは＃
				if(
						i == 0 ||					//左辺
						j == 0 ||					//上辺
						i == intNum1 - 1 ||			//右辺
						j == intNum2 - 1	) {		//下辺
					//出力
					System.out.print("#");
				} else {
					//出力
					System.out.print(".");
				}
			} if(
						i == 0 ||					//左辺
						j == 0 ||					//上辺
						i == intNum1 - 1 ||			//右辺
						j == intNum2 - 1	) {		//下辺
					//出力
					System.out.print("#");
				} else {
					//出力
					System.out.print(".");
				} i == 0 ||					//左辺
						j == 0 ||					//上辺
						i == intNum1 - 1 ||			//右辺
						j == intNum2 - 1 i == intNum1 - 1 i == 0 ||					//左辺
						j == 0 ||					//上辺
						i == intNum1 - 1 ||			//右辺
						j == intNum2 - 1 i == 0 i 0 j == 0 j 0 i == intNum1 - 1 i intNum1 - 1 intNum1 1 j == intNum2 - 1 j intNum2 - 1 intNum2 1 {		//下辺
					//出力
					System.out.print("#");
				} System.out.print("#") System.out.print System.out System System.out "#" {
					//出力
					System.out.print(".");
				} System.out.print(".") System.out.print System.out System System.out "." System.out.println("") System.out.println System.out System System.out "" System.out.println("") System.out.println System.out System System.out "" int intNum1 intNum1 int intNum2 intNum2
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

/**
 * Lesson5B　以下のような、たてH cm よこ W cm の枠を描くプログラム
##########
#........#
#........#
#........#
#........#
##########

 * @author 前島佑介
 * @version 2014/12/1
 */
class Main {

	// プログラムのエントリポイント
	public static void main(String[] args) {

		try{
			//キーボードからの入力準備
			BufferedReader insBR = new BufferedReader(new InputStreamReader(System.in));

			//入力値を格納する場所を初期化
			String strLine = "";

			//入力値をint型で保存する場所
			ArrayList<String> strArray = new ArrayList<String>();

			//入力値の取得にループさせる
			while(true) {

				//1行読み込む
				strLine = insBR.readLine();

				//入力値が"0 0"だったら
				if(strLine.equals("0 0")) {

					//ループから抜ける
					break;
				}

				//入力値を保存
				strArray.add(strLine);
			}

			//ループさせる
			for(int i = 0; i < strArray.size(); i++) {

				//文字列の分割:入力値を" "で分ける
				//分けた文字列はstrLineAry[0]とstrLineAry[1]に分けられる
				String[] strLineAry = strArray.get(i).split(" ");

				//左の値
				int intNum1 = Integer.parseInt(strLineAry[0]);

				//右の値
				int intNum2 = Integer.parseInt(strLineAry[1]);

				//出力させるメソッド
				SharpPaint(intNum1, intNum2);
			}

		//例外処理
		}catch(IOException e) {

			//例外時の出力
			System.out.println(e);
		}catch(NumberFormatException e) {


			//数値以外の入力値で出力
			System.out.println("数値で入力して下さい");
		}
	}
	/**
	 * たてintNum1の分よこintNum２の分の長方形を描くプログラム
	 * 1 cm × 1cm の長方形を '#'で表す
	 * @param intNum1
	 * @param intNum2
	 */
	public static void SharpPaint(int intNum1, int intNum2) {

		//たての分　ループ
		for(int i = 0; i < intNum1; i++) {

			//よこの分　ループ
			for(int j = 0; j < intNum2; j++) {

				//近くの周りは＃
				if(
						i == 0 ||					//左辺
						j == 0 ||					//上辺
						i == intNum1 - 1 ||			//右辺
						j == intNum2 - 1	) {		//下辺
					//出力
					System.out.print("#");
				} else {
					//出力
					System.out.print(".");
				}
			}
			//改行
			System.out.println("");
		}

		//改行
		System.out.println("");

	}
}