The lag of a moving average is actually the X-axis coordinate of the centre of gravity of the weight function: (image by John Ehlers):

In your tutorial, the "forecast value" is an arithmetic mean: or in in plain English: sum all observations, and divide the sum by the number of observations, resulting in a "Simple Moving Average" (SMA). Another way to come to the same result, is to multiply all observations by $1/n$, and sum those products.
In discrete time series analysis, you have a window that moves from the start (left) to the end (right) of your graph, step by step, so you look at the ($n$) observations in the window, multiply them all with $1/n$, sum them, and this gives you the result (the value of the moving average), after that, you move 1 step to the right, and you repeat the process for the next value of the moving average: engineers call this process "convolution", and the $n$ times $1/n$ are the "coefficients", or "weights" you multiply the segment of your time series that falls in the window with (in the current step).
Now, your "forecast value", is a Simple Moving Average. So the weight function will have a rectangular shape, and the (X-axis coordinate of the) centre of gravity is not $(m+1)/2$, but it is $(n-1)/2$, with n the window length.
There are different types of moving averages, who use different shapes of these weight functions to try to reduce this lag: e.g. the weights of a Linear Weighted Moving Average will not have a rectangular, but a triangular shape: the centre of gravity's x-axis coordinate of a right triangle will be at $1/3$rd its length, so this averaging technique will follow the original time series quicker if it turns.
There even is a group of moving averages that try to cancel out the lag entirely, by using weights/coefficients that are negative at the back (left) of the window (ZLEMA, HMA, ...). These are good attempts, but there is 1 thing you need to keep in mind: this theoretical lag is only correct on consistently rising/falling prices, and if you define $m$, (or $n$) in terms of lag, there actually is very little difference between all these coefficients/weighting schemes.
So to answer your question:
"As an example, how does a window size of m in a moving average smoothing model, correspond to a lag of 3?"
-> it depends: for a SMA (or EMA) it will be 7: ($(n-1)/2$), for a LWMA it will be 10: ($(n-1)/3$), ... It all depends on the shape of your coefficients / weight function, and its centre of gravity.
And btw: a moving average as a forecast would require highly, highly persistent input data to be statistically significant. But that's another discussion entirely..
Good luck.