"use strict";

function Main(input) {
    let lines = input.split('\n')
    let N = lines[0].split(' ')[0] * 1
    let D = lines[0].split(' ')[1] * 1
    lines.shift()
    let ans = 0
  	// それぞれの行をバラす処理
    let line = lines.map((l) => {
        return l.split(' ')
    })
  	// 組み合わせのループ処理の常套句
  	for(let i = 0; i < N - 1; i++ ){
    	for(let j = i + 1; j < N; j++ ){
        	// 判定用の値
          	let t = 0;
          	// 次元に合わせた計算用のループ
			for(let k = 0; k < D; k++){
            	t += Math.pow((line[i][k] - line[j][k]),2);
            }
          	//平方根とって1で割ってあまりが出ないならそれは条件を満たしている
          	if(Math.sqrt(t) % 1 == 0){
            	ans++;
            }
        }
    }
 
  	console.log(ans)
}
Main(require("fs").readFileSync("/dev/stdin", "utf8"));
