#include <iostream>
using namespace std;
#include <string>
#include <cstring>
#include <queue>
typedef struct Lnode {
int data;
struct Lnode *next;
}Lnode, *Linklist;
void Creatlist(Linklist &L, int e) {
Lnode *p = new Lnode;
p->data = e;
p->next = NULL;
Lnode *cur = L;
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = p;
}
void Initlist(Linklist &L){
L = new Lnode;
L->next = NULL;
}
void Merge(Linklist &L1, Linklist &L2, Linklist &L3) {
Lnode *cur1 = L1->next;
Lnode *cur2 = L2->next;
Lnode *cur3 = L3;
while (cur1 != NULL && cur2 != NULL) {
if (cur1->data < cur2->data) {
cur3->next = cur1;
cur1 = cur1->next;
}
else if (cur1->data == cur2->data){
cur3->next = cur1;
cur1 = cur1->next;
cur2 = cur2->next;
}
else {
cur3->next = cur2;
cur2 = cur2->next;
}
cur3 = cur3->next;
}
cur3->next = cur1 == NULL ? cur2 : cur1;
}
void Dele(Linklist &L){
Lnode *p=L->next;
while(p!=NULL&&p->next!=NULL){
Lnode *q=p->next;
while(q&&p->data==q->data){
q=q->next;
}
p->next=q; p=p->next;
}
}
void Print(Linklist &L) {
Lnode *p = L->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
Linklist L1;
Linklist L2;
Initlist(L1);
Initlist(L2);
int n, m;
while (scanf("%d %d", &n, &m) != EOF) {
if (m == 0 && n == 0) break;
for (int i = 0; i < n; i++) {
int e;
scanf("%d", &e);
Creatlist(L1, e);
}
for (int j = 0; j < m; j++) {
int e;
scanf("%d", &e);
Creatlist(L2, e);
}
Dele(L1);
Dele(L2);
Lnode *L3 = new Lnode;
Lnode *cur3 = L3;
Merge(L1, L2, L3);
Print(L3);
Initlist(L1);
Initlist(L2);
Initlist(L3);
}
}