#include <bits/stdc++.h>
#include <limits.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define ll long long
using namespace std;
template<typename T>
using ordered_set = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;
#define lsb(x) (__builtin_ctzll(x)) //pos of least set bit (first 1)
#define msb(x) (63 - __builtin_clzll(x)) //pos of most set bit (last 1)
ll dx[8] = {-1,0,1,0,-1,-1,1,1};
ll dy[8] = {0,1,0,-1,-1,1,1,-1};
void fileIO(void) {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
}
void fastIO() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
}
ll calc(vector<ll> v){
sort(v.begin(),v.end());
ll x=0, pref=0;
for(ll i=0; i<v.size(); i++){
x += i*v[i] - pref;
pref+=v[i];
}
return x;
}
void solve(){
ll n,m; cin>>n>>m;
const ll maxc=1e5;
vector<vector<ll>> col_rows(maxc+1) , col_columns(maxc+1);
for(ll i=0; i<n; i++){
for(ll j=0; j<m; j++){
ll color; cin>>color;
col_rows[color].push_back(i);
col_columns[color].push_back(j);
}
}
ll ans=0;
for(ll i=1; i<=maxc; i++){
ans += calc(col_rows[i]);
ans += calc(col_columns[i]);
}
cout<<ans;
}
int main() {
fileIO();
fastIO();
ll testcases=1;
//cin>>testcases;
while(testcases--){
solve();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxsaW1pdHMuaD4KI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CiNkZWZpbmUgbGwgbG9uZyBsb25nCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnVzaW5nIG9yZGVyZWRfc2V0ID0gdHJlZTxULCBudWxsX3R5cGUsIGxlc3NfZXF1YWw8VD4sIHJiX3RyZWVfdGFnLCB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+OwojZGVmaW5lIGxzYih4KSAoX19idWlsdGluX2N0emxsKHgpKSAvL3BvcyBvZiBsZWFzdCBzZXQgYml0IChmaXJzdCAxKQojZGVmaW5lIG1zYih4KSAoNjMgLSBfX2J1aWx0aW5fY2x6bGwoeCkpIC8vcG9zIG9mIG1vc3Qgc2V0IGJpdCAobGFzdCAxKQpsbCBkeFs4XSA9IHstMSwwLDEsMCwtMSwtMSwxLDF9OwpsbCBkeVs4XSA9IHswLDEsMCwtMSwtMSwxLDEsLTF9Owp2b2lkIGZpbGVJTyh2b2lkKSB7CgojaWZuZGVmIE9OTElORV9KVURHRQoKICAgIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKCiNlbmRpZgoKfQp2b2lkIGZhc3RJTygpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CiAgICBjb3V0LnRpZShOVUxMKTsKICB9ICAgCgogIGxsIGNhbGModmVjdG9yPGxsPiB2KXsKICAgIHNvcnQodi5iZWdpbigpLHYuZW5kKCkpOwogICAgbGwgeD0wLCBwcmVmPTA7CiAgICBmb3IobGwgaT0wOyBpPHYuc2l6ZSgpOyBpKyspewogICAgICB4ICs9IGkqdltpXSAtIHByZWY7CiAgICAgIHByZWYrPXZbaV07CiAgICB9CiAgICByZXR1cm4geDsKICB9CgogIHZvaWQgc29sdmUoKXsKbGwgbixtOyBjaW4+Pm4+Pm07CmNvbnN0IGxsIG1heGM9MWU1Owp2ZWN0b3I8dmVjdG9yPGxsPj4gY29sX3Jvd3MobWF4YysxKSAsIGNvbF9jb2x1bW5zKG1heGMrMSk7Cgpmb3IobGwgaT0wOyBpPG47IGkrKyl7CiAgZm9yKGxsIGo9MDsgajxtOyBqKyspewogICAgbGwgY29sb3I7IGNpbj4+Y29sb3I7CiAgICBjb2xfcm93c1tjb2xvcl0ucHVzaF9iYWNrKGkpOwogICAgY29sX2NvbHVtbnNbY29sb3JdLnB1c2hfYmFjayhqKTsKICB9Cn0KbGwgYW5zPTA7CmZvcihsbCBpPTE7IGk8PW1heGM7IGkrKyl7CiAgYW5zICs9IGNhbGMoY29sX3Jvd3NbaV0pOwogIGFucyArPSBjYWxjKGNvbF9jb2x1bW5zW2ldKTsKfQpjb3V0PDxhbnM7Cn0KCiAgaW50IG1haW4oKSB7CiAgICBmaWxlSU8oKTsKICAgIGZhc3RJTygpOwogICAgbGwgdGVzdGNhc2VzPTE7CiAgICAvL2Npbj4+dGVzdGNhc2VzOwogICAgd2hpbGUodGVzdGNhc2VzLS0pewogICAgICAgIHNvbHZlKCk7CiAgICB9Cgp9