At the moment I can think of the below 2 options.
#1. Have both the Desktop flows in the same flow
Meaning, in Flow 1 have the code as below-
Code of Flow 1 Starts here
...
...
Code of Flow 1 Ends here
Here Call Run a Desktop Flow -> Start Flow 2 here.
Inside the code check if it is 15th of month and if it has crossed the time of 9 am.
If >9:00 am then immediately continue the run of Flow 2.
If less than 9 am (eg; 8 am) then it means still there is 1 hour to start the second flow.
Have a Wait of 1 hour after which it will kick off the Flow 2.
But yes your Flow will be occupied for that wait of 1 hour. This depends on how long or how short the gap is between the two flows.
#2. Have Flow 1 to write something to a Text file something like <Date><Time><Status:Running/Completed>
In the beginning of Flow 2 have a code to read this text file and check whether the Status is still running or completed. Also check the date to make sure it is from the current day.
Flow 2 will start at its scheduled time (15th 9 am) and keep on checking this file for the status.
If Status=Running then do nothing. Have a loop that will keep on checking till the status is Complete.
Since this will keep on checking in every xx minutes, it will come back again to check.
If Status=Completed then Start Flow2.