int main() {

	int n,m,temp,a1[1000],a2[10000];

	scanf("%d %d",&n,&m);//接收 数组1 和 数组2 含有整型数据数量

	for(int i=0; i<n; i++) {
		scanf("%d",&a1[i]);
	}
	for(int i=0; i<m; i++) {
		scanf("%d",&a2[i]);
	}

	for(int i=0; i<m; i++) {//将 数组2 接在 数组1 后面
		a1[n+i]=a2[i];
	}

	for(int i=0; i<m+n-1; i++) {//冒泡排序,需要整体冒泡次数是 数组数据个数-1
		for(int j=0; j<m+n-1; j++) {//从头开始算,这个数与下一个数大小比较,比较完,+1,接着下一个数与下下个数比较
			if(a1[j]>a1[j+1]) {
				temp=a1[j];
				a1[j]=a1[j+1];
				a1[j+1]=temp;
			}
		}
	}

	for(int i=0; i<m+n; i++) {//将 数组 里的数输出
		printf("%d ",a1[i]);
	}

	return 0;
}