'use strict';

const main = (input) => {
    const t = input.split('\n');
    const nx = t[0].split(' ');
    const xs = t[1].split(' ');
    const N = parseInt(nx[0], 10);
    const X = parseInt(nx[1], 10);

    // f(a) = (X - x(a)), 全てのxでf(a)がDの倍数となるような最大のDを求める、
    // 簡単のため X = 0 に座標系をずらす、最大公約数を求める問題となった
    const xk = {};
    let m = Math.pow(10, 10); // 最小値
    xs.forEach(v => {
        v = Math.abs(parseInt(v, 10) - X);
        if (v != 0) {
            xk[v] = true;
        }
        if (v < m) {
            m = v;
        }
    });
    const x = Object.keys(xk);
    // 最小公倍数は必ず最小値より小さい。
    let d = m;
    while (d != 1) {
        let r = x.every(v => {
            return (v % d) == 0;
        });
        if (r) {
            break;            
        }
        // 見つからなかった... m == d の時だけ 次は d/2 に飛ばす
        if (m == d) {
            d = Math.floor(d / 2);
        } else {
            d--;
        }
    }
    console.log(d);
};

const isTest = false;

if (isTest) {
    main('3 3\n1 7 11');
    main('3 81\n33 105 57')
    main('1 1\n1000000000')
} else {
    main(require('fs').readFileSync('/dev/stdin', 'utf8'));
}