Plz Halp, Need Investors ASAP Bob has a startup that is developing a product that uses “advanced AI” and “black magic” to automatically code-golf computer programs. Unfortunately, Bob is running out of cash and desperately needs money from investors to keep his company running. Each investor that Bob has contacted wishes to schedule a meeting with a certain start and end time. However, some of meeting times conflict with each other. Bob wishes to meet with as many investors as possible so he can raise the largest amount of money. How many investors can Bob meet with, given that Bob can only meet with one investor at a time?
Input Format
Input is given as an array of pairs (or the equivalent in your chosen language). Each pair p represents one investor, where p[0] is the start time of the investor’s meeting and p[1] is the end time.
For example, in the test case [(0,10),(5,10),(12,13)], there are three investors: one who wants to meet from time 0 to time 10, one who wants to meet from time 5 to time 10, and one who wants to meet from time 12 to time 13. Meetings will always have a positive duration, and a meeting that ends at time k does not conflict with a meeting that starts at time k.
You may use any reasonable I/O method for input.
Test Cases
[(0,10),(5,10),(12,13)] =&gt; 2 (investors 1 and 3)

[(10,20),(10,20),(20,30),(15,25)] =&gt; 2 (investors 1 and 3)

[(0,3),(1,5),(1,5),(1,5),(4,9),(6,12),(10,15),(13,18),(13,18),(13,18),(17,19)] =&gt; 4 (investors 1,5,7 and 11)

[(1,1000),(1,2),(2,3),(3,4),(4,5),(5,6),(6,7)] =&gt; 6 (every investor except the first)

[(1,2),(101,132),(102,165),(3,9),(10,20),(21,23),(84,87)] =&gt; 6 (investors 1,2,4,5,6,7)

Output
Your program should output an integer, the maximum number of investors that Bob can meet with.
Standard loopholes are prohibited. This is code-golf, so the shortest solution in each language wins.
Python 2, 53 52 bytes
Based on xnor's answer.
-1 byte thanks to dingledooper!

f=lambda l,t=0:-min([a&lt;t or~f(l,b)for a,b in l]+[0])

Try it online!
This is a recursive function which takes 2 arguments:

l: a list of all offered meetings
t: the time our last meeting ended (initially 0)

The list comprehension iterates over all offered meetings (a, b).
If the meeting starts before our last meeting ended (a&lt;t), a&lt;t or ... evaluates to True, which is basically the same as 1 in Python.
Otherwise f(l,b) is called to see how much more meetings we can fit in if we take the current meeting. The bitwise inverted value of this gets into the list.
If a&lt;t was false for any meeting (a, b) in the comprehension, min returns the smallest of all possible ~f(l,b) values. Then -min(...) returns -~f(l,b)==1+f(l,b) for some meeting.
Otherwise -min(...) is equal to 0.

47 bytes if we can assume that the input is not empty:

f=lambda l,t=0:1-min(a&lt;t or-f(l,b)for a,b in l)

Try it online!