The task of finding heavy hitters is one of the best known and well studied problems in the area of data streams. One is given a list i1, i2, . . . , im ∈ [n] and the goal is to identify the items among [n] that appear frequently in the list. In sub-polynomial space, the strongest guarantee available is the ℓ2 guarantee, which requires finding all items that occur at least ε f 2 times in the stream, where the vector f ∈ R n is the count histogram of the stream with ith coordinate equal to the number of times i appears fi := #{j ∈ [m] : ij = i}. The first algorithm to achieve the ℓ2 guarantee was the CountSketch of [11], which requires O(ε −2 log n) words of memory and O(log n) update time and is known to be space-optimal if the stream allows for deletions. The recent work of [7] gave an improved algorithm for insertion-only streams, using only O(ε −2 log ε −1 log log n) words of memory. In this work, we give an algorithm BPTree for ℓ2 heavy hitters in insertion-only streams that achieves O(ε −2 log ε −1 ) words of memory and O(log ε −1 ) update time, which is the optimal dependence on n and m. In addition, we describe an algorithm for tracking f 2 at all times with O(ε −2 ) memory and update time. Our analyses rely on bounding the expected supremum of a Bernoulli process involving Rademachers with limited independence, which we accomplish via a Dudley-like chaining argument that may have applications elsewhere.