updated lm function