#include <stdio.h>

int main()
{
	int arr1[1000] = { 0 };
	int arr2[1000] = { 0 };
    int arr[2000] = { 0 };
	int m = 0;
	int n = 0;
    int set = 0;
	scanf("%d %d",&m,&n);
    for (int a = 0; a < m; a++)
    {
        scanf("%d",&arr1[a]);
    }
    for (int b = 0; b < n; b++)
    {
        scanf("%d",&arr2[b]);
    }
	int sum = m + n;
	for (int i = 0; i < sum; i++)
	{
        if (i < m)
        {
            arr[i] = arr1[i];
        }
        else
        {
            arr[i] = arr2[i - m];
        }
	}
    //冒泡排序
    for (int i = 0; i < sum-1; i++)//循环每跑一趟就会排出一个较大值(顺序)一共需要跑(sum-1)次   一共要跑的次数
    {
        for (int j = 0; j < sum - 1 - i; j++)//每排出一个较大值需要被排的数目就会减一  每跑一次需要遍历的次数
        {
            if (arr[j] >= arr[j+1])
            {
                set = arr[j];
                arr[j] = arr[j+1];
                arr[j+1]=set;
            }
        }
    }
    for (int x = 0; x < sum; x++)
    {
        printf("%d ", arr[x]);
    }
	return 0;
}