// inputに入力データ全体が入る
function Main(input) {
    // 1行目がinput[0], 2行目がinput[1], …に入る
    input = input.split("\n");
    tmp0 = input[0].split(" ");
    N = Number(tmp0[0])
    D = Number(tmp0[1])
    
    num = []
    for(var i=1; i <= N; i++)
    {
        tmp = input[i].split(" ")
        x = []
        for(var j=1; j <= D; j++)
        {
            x.push(Number(tmp[j-1]))
        }
        num.push(x)
    }

    ans=0
    for(var i=1; i< N; i++)
    {
        for(var j=i+1; j <= N; j++)
        {
            var tmp = 0
            for(var k =0; k<D;k++)
            {
                tmp += Math.pow(Math.abs(num[i-1][k] - num[j-1][k]),2)
            }
            if(Math.round(Math.sqrt(tmp)) === Math.sqrt(tmp))
            {
                ans++
            }
        }
    }
    console.log(ans)
}
  //*この行以降は編集しないでください（標準入出力から一度に読み込み、Mainを呼び出します）
Main(require("fs").readFileSync("/dev/stdin", "utf8"));
// Main("3 2\n1 2\n5 5\n-2 8\n");