#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define maxsize 10000
#define numsize 10000
typedef struct
{
int *elem;
int length;
int listsize;
}list;
int init(list *l)
{
l->elem=(int *)malloc(maxsize *sizeof(int));
if(!l->elem)
return -1;
l->length=0;
l->listsize=maxsize;
return 0;
}
void creat(list *l,int n)
{
int i;
for(i=0;i<n;i++)
{
scanf("%d",&l->elem[i]);
}
l->length=n;
}
void print(list *l)
{
int i;
for(i=0;i<l->length;i++)
{
if(i==0)
printf("%d",l->elem[i]);
else printf(" %d",l->elem[i]);
}
}
int guibing(list *a,list *b,list *l)
{
int i=0,j=0,k=0;
l->elem=(int *)malloc(2*maxsize *sizeof(int));
if(!l->elem)
return -1;
l->length=0;
while(i<a->length&&j<b->length)
{
if(a->elem[i]<b->elem[j])
{
l->elem[k]=a->elem[i];
i++;
k++;
l->length++;
}
else
{
l->elem[k]=b->elem[j];
j++;
k++;
l->length++;
}
}
while(i<a->length)
{
l->elem[k]=a->elem[i];
i++;
k++;
l->length++;
}
while(j<b->length)
{
l->elem[k]=b->elem[j];
j++;
k++;
l->length++;
}
}
int main()
{
int n,m;
list a,b,l;
scanf("%d %d",&m,&n);
init(&a);
init(&b);
creat(&a,m);
creat(&b,n);
guibing(&a,&b,&l);
print(&l);
return 0;
}