#include <bits/stdc++.h>

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
//typedef complex<double> point;
ll mod = 1e9 + 7;
#define EPS 1e-1
#define PI 3.141592653589
#define point complex<ld>
#define dot(a,b) (conj(a)*b).real()
#define cross(a,b) (conj(a)*b).imag()
#define line tuple<ll,ll,ll>
#define X real()
#define Y imag()

//int dx[] = { 0, 0, 1, -1 };
//int dy[] = { 1, -1, 0, 0 };


#define iofile freopen("input.txt","r",stdin); freopen("output.txt","w",stdout);
#define fastio ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
using namespace std;

void primeFactors(ll n, vector<ll>&vec){

	while (n % 2 == 0){
		vec.push_back(2);
		n = n / 2;
	}
	for (ll i = 3; i <= sqrt(n); i = i + 2){
		while (n%i == 0){
			vec.push_back(i);
			n = n / i;
		}
	}

	if (n > 2){vec.push_back(n);}
}

ll gcd(ll a, ll b) {
	if (b == 0) { return a; }
	else { return gcd(b, a%b); }
}

ll Lcm(ll a,ll b){

 return((a*b)/gcd(a,b));

}

line getL(point p1, point p2) {
	ll a, b, c;
	a = p2.Y - p1.Y;
	b = p1.X - p2.X;
	c = -a * p1.X - b * p1.Y;
	ll gcdres = abs(gcd(a, gcd(b, c)));
	if (a < 0 || a == 0 && b < 0) { gcdres *= -1; }
	a /= gcdres;
	b /= gcdres;
	c /= gcdres;
	return line(a, b, c);
}

ll fastpow(ll base, ll pow)
{
	if (!base)
		return 0;
	if (!pow)
		return 1;
	if (pow == 1)
		return base;
	ll x = fastpow(base, pow / 2) % mod;
	x *= x;
	x %= mod;
	if (pow % 2)
		x *= base;
	return x % mod;
}

ll inverse(ll x)
{
	return fastpow(x, mod - 2) % mod;
}

ld disty(pair<ll, ll>a, pair <ll, ll> b) {
	return sqrt(pow(b.second - a.second, 2) + pow(b.first - a.first, 2));
}

/*ll fact[(int)1e6 + 5], inv[(int)1e6 + 5];
void init()
{
	fact[0] = inv[0] = 1;
	for (int i = 1; i <= 1e6; i++)
	{
		fact[i] = (i * fact[i - 1]) % mod;
		inv[i] = inverse(fact[i]);
	}
}*/

void factorize(ll x, set<ll> &ss)
{
	while (x % 2 == 0)
		ss.insert(2), x /= 2;
	for (int i = 3; i <= sqrt(x); i += 2)
		while (x % i == 0)
			ss.insert(i), x /= i;
	if (x > 2)
		ss.insert(x);
}

/*ll ncr(ll n, ll r)
{
	return ((fact[n] * inv[r]) % mod * inv[n - r]) % mod;
}*/

void SieveOfEratosthenes(ll n,bool prime[])
{



	for (int p = 2; p*p <= n; p++)
	{

		if (prime[p] == true)
		{
			for (int i = p * p; i <= n; i += p)
				prime[i] = false;
		}
	}
}
void divisors(ll n, vector<ll>&vec) {
	for (ll i = 2; i <= sqrt(n); ++i) {
		if (n%i == 0 && i != sqrt(n)) { vec.push_back(i); vec.push_back(n / i); }
		else if (n%i == 0) { vec.push_back(i); }
	}

}



bool isprime(ll n) {
	if (n == 1) { return false; }
	for (int i = 2; i <= sqrt(n); ++i) {
		if (n%i == 0) { return false; }
	}
	return true;
}

point rot(point p, ld angle) {
	return(p*polar((ld)1.0, angle));
}

point rotA(point p, point A, ld angle) {
	return (((p - A)*polar((ld)1, angle)) + A);
}

ld distance(point a, point b) {
	ld x1 = a.X, y1 = a.Y, x2 = b.X, y2 = b.Y;
	return pow(y2 - y1, 2) + pow(x2 - x1, 2);

}

int distSq(pair<ll,ll> p, pair<ll,ll> q)
{
    return (p.first - q.first) * (p.first - q.first) + (p.second - q.second) * (p.second - q.second);
}

bool isSquare(pair<ll,ll> p1, pair<ll,ll> p2, pair<ll,ll> p3, pair<ll,ll> p4)
{
    ll d2 = distSq(p1, p2);
    ll d3 = distSq(p1, p3);
    ll d4 = distSq(p1, p4);
    if (d2 == d3 && 2 * d2 == d4 && 2 * d2 == distSq(p2, p3)) {
        int d = distSq(p2, p4);
        return (d == distSq(p3, p4) && d == d2);
    }

    // The below two cases are similar to above case
    if (d3 == d4 && 2 * d3 == d2 && 2 * d3 == distSq(p3, p4)) {
        int d = distSq(p2, p3);
        return (d == distSq(p2, p4) && d == d3);
    }
    if (d2 == d4 && 2 * d2 == d3 && 2 * d2 == distSq(p2, p4)) {
        int d = distSq(p2, p3);
        return (d == distSq(p3, p4) && d == d2);
    }

    return false;
}

ll FP(ll base,ll power,ll m){

if(power==0){return 1;}
else if(power%2==0){
    ll res=FP(base,power/2,m);
    return (res%m*res%m)%m;
}
else{
    ll res=FP(base,power/2,m);
    return ((((base%m*(res%m)) % m)*(res%m)%m)%m);
}

}
ll EGCD(ll a,ll b,ll &x,ll &y){

   if(b==0){x=0;y=1;return a;}
   else{
    ll ans=EGCD(b,a%b,x,y);
    ll tmp=x;
    x=y-(a/b)*x;
    y=tmp;
    return ans;
   }
}
//ll f[(int)1e7+7],in[(int)1e7+7];
/*void prec(ull n){
f[0]=1;
in[0]=1;
for(int i=1;i<=n;++i){
    f[i]=(f[i-1]*i)%mod;
    in[i]=FP(f[i],mod-2,mod);
}
}
ll npr(ll n,ll r){
    return (f[n]*in[n-r])%mod;
}
ll NCR(ll n,ll r){
return (((f[n]*in[n-r])%mod)*in[r])%mod;
}*/
ll factorial(ll n){
if(n==0){return 1;}
else return n*factorial(n-1);
}

int main(){
	//fastio
    int n,k;
    cin>>n>>k;
    ll arr[n],h[n];
    for(int i=0;i<n;++i){
        cin>>h[i];
    }
    arr[0]=0;
    arr[1]=abs(h[1]-h[0]);
    for(int i=2;i<n;++i){
        arr[i]=1e9;
        for(int j=i-1;j>=max(0,i-k);--j){
            arr[i]=min(arr[i],abs(h[j]-h[i])+arr[j]);
        }
    }
    cout<<arr[n-1]<<"\n";
    return 0;
}


Measured memory_bytes: 1792