```python
from typing import List

def span_merge(spans: List[tuple]) -> List[tuple]:
    """
    Given booking spans as a start and an end each, combine every span that overlaps another,
    or merely touches it end to start, into a single span. Return what is left ordered by start.
    Spans arrive in no particular order.
    """
    if not spans:
        return []

    # Sort the spans by their start time
    spans.sort(key=lambda x: x[0])

    merged_spans = []
    current_span = spans[0]

    for span in spans[1:]:
        if span[0] <= current_span[1]:
            # Merge the current span with the new span
            current_span = (current_span[0], max(current_span[1], span[1]))
        else:
            # Add the current span to the merged list and start a new one
            merged_spans.append(current_span)
            current_span = span

    # Add the last span to the merged list
    merged_spans.append(current_span)

    return merged_spans
```