You can decompose cat into allocating an empty tensor and assigning slices (which broadcasts)
res = torch.empty((b, m + 1, n), device=a.device, dtype=a.dtype)
res[:, :1] = a[None]
res[:, 1:] = b[:, :, None]

Best regards
Thomas