minimum priority queue using min heap