The strange ordering of Sharkovskii Introduction

In this challenge, we will be dealing with a certain ordering of the positive integers.
The ordering goes like this:

   3,    5,    7,    9,    11, ...
 2*3,  2*5,  2*7,  2*9,  2*11, ...
 4*3,  4*5,  4*7,  4*9,  4*11, ...
 8*3,  8*5,  8*7,  8*9,  8*11, ...
16*3, 16*5, 16*7, 16*9, 16*11, ...
 ...
... 64, 32, 16, 8, 4, 2, 1


We first list all odd integers greater than 1 in ascending order.
Then we list two times odd integers greater than 1, then 4 times, then 8 times, and so on: for all k, we list 2k times the odd integers greater than 1 in ascending order.
Finally, we list the powers of two in descending order, ending at 1.
Every positive integer occurs in this "list" exactly once.

More explicitly, consider two distinct positive integers A = n&middot;2p and B = m&middot;2q, where n, m &ge; 1 are odd, and p, q &ge; 0.
Then A comes before B in the ordering, if one of the following conditions holds:


n > 1, m > 1 and p &lt; q
1 &lt; n &lt; m and p = q
n > m = 1
n = m = 1 and p > q


This ordering appears in the surprising mathematical result known as Sharkovskii's theorem, which concerns the periodic points of dynamical systems.
I will not go into the details here.

The task

Your task in this challenge is to compute the above ordering.
Your inputs are two positive integers A and B, which may be equal.
Your output is a truthy value if A comes before B in the ordering, and a falsy value otherwise.
If A = B, your output should be truthy.
You can take A and B in either order, as long as you're consistent.

You don't have to worry about integer overflow, but your algorithm should theoretically work for arbitrarily large inputs.

Test cases

Truthy instances

3 11
9 6
48 112
49 112
158 158
36 24
14 28
144 32
32 32
32 8
3 1
1 1


Falsy instances

1 2
1 5
11 5
20 25
2 8
256 255
256 257
72 52
2176 1216
2176 2496
JavaScript (ES6), 53 49 bytes

f=(a,b)=&gt;b&lt;2||a&gt;1&amp;&amp;(a&amp;b&amp;1?a&lt;=b:a&amp;1|~b&amp;f(a/2,b/2))


Explanation:


If b is 1, then a precedes (or equals) b
Otherwise, if a is 1, then a does not precede b
Otherwise, if both a and b are odd, then use regular inequality check
Otherwise, if a is odd, then it precedes b
Otherwise, if b is odd, then a does not precede b
Otherwise, divide both a and b by 2 and try again.


Edit: Saved 2 bytes thanks to @Arnauld.