Prometheus exposes _bucket{le="..."} as cumulative counts, plus _sum and _count.
The mean is exact: _sum / _count. A quantile is not. You compute a rank, walk the cumulative counts until you cross it, and report that bucket's upper bound:
rank = ceil(q · n)
walk cumulative counts until cum >= rank
answer = that bucket's upper bound
So a reported p99 of 2000 ms means only "somewhere between 500 and 2000 ms". Your bucket boundaries are the resolution of your answer, which is why they must straddle your SLO. Tightening an SLO means adding boundaries, not adding samples.
