## Description

Implement a time planner that receives the availability of two people, a and b, and a duration, dur. Return the earliest time slot in which both people can meet. If no satisfactory time exists, return None.

You may assume availabilities are sorted.

Example:

```
a = [(10, 50), (60, 120), (140, 210)]
b = [(0, 15), (60, 70)]
dur = 8
>>> (60, 68)
```

## Solution 1: `O(n^2)`

```
def time_planner(a, b, dur):
for avail_a in a:
for avail_b in b:
overlap = set(range(*avail_a)) & set(range(*avail_b))
if len(overlap) >= dur:
overlap = sorted(list(overlap))
return (overlap[0], overlap[0] + dur)
return None
```

## Solution 2: `O(n)`

```
def time_planner(a, b, dur):
i_a, i_b = 0, 0
while i_a < len(a) and i_b < len(b):
start = max(a[i_a][0], b[i_b][0])
end = min(a[i_a][1], b[i_b][1])
if start + dur <= end:
return start, start + dur
if a[i_a][1] < b[i_b][1]:
i_a += 1
else:
i_b += 1
return None
```