I have the following ranges in interval [1-15]

I want to find the overlap ranges between people 1 & 2.

Person1 [1, 3] [5, 10]
Person2 [2, 4] [8, 15]

Here I should get a list of Ranges which are [2,3], [8, 10].

What I've found so far is to loop by person1's range, then by person2's ranges, then for each element of each range, then using conditional test. 
This solution doesn't satisfy me as it's O(n). More there're range of elements, more my algo will going to loop for each element of each range and that will take time if I want to see the insection between theses ranges 

Person1: [100000; 150000] and [90000; 140000].
Person2: [105000; 110000] and [130000; 140050]

Note that a range is represented in my code by:

```
public class Range{
    public int Start {get;set;}
    public int End {get;set;}
}

```

So what's the most efficient way to find the overlap ranges?

Any help would be appreciated.

PS: there's similar question here [How to find range overlap in python?](https://stackoverflow.com/questions/6821156/how-to-find-range-overlap-in-python) but I don't understand python code.