var lines = [];
//最大の移動距離を格納しておく為初期化
var D = -1;
//都市の数
var N;
//xの座標を保存しておく
var x = [];
//初期座標
var first;
//初期座標からxまでの距離を格納
var absTotal = [];
//標準出力
var stdout = "Yes";
//一つ前の最後の文字を初期化
var lastWord = null;

function gcd(m, n) {
  // 剰余
  var r;

  if(m < n) {  // m >= nにする
    r = m;  //一時退避
    m = n;
    n = r;
  }

  while ((r = m % n) != 0) {
    m = n;
    n = r;
  }

  return n;
}

var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', function(line) {
  lines.push(line);
});
reader.on('close', function() {
  //標準出力から格納
  N = lines[0].split(' ')[0];
  first = lines[0].split(' ')[1];
  x = lines[1].split(' ');
  //console.log(x);

  //最大公約数を調べる為、各都市間の間隔を求める
  for(var i = 0; i < x.length; i++ ){
    //都市x[i]の座標を格納
    var toshi = x[i];
    //各都市と出発点の距離を格納
    var abs = Math.abs(first - toshi);
    //リストに各距離を格納
    absTotal.push(abs);
  }

  //最大公約数を求めるため、最大公約数となりえるものを先頭に持ってくる
  absTotal.sort();
  //console.log(absTotal);
  var D = absTotal[0];
  //最大公約数を探し終わるまでフラグをfalseにしておく
  var find = false;
  while(!(find)){
    for(var i = 0; i < absTotal.length; i++ ){
      var hikaku = absTotal[i];
      //console.log(hikaku % maxNum);
      if(hikaku % D != 0){
        D = gcd(D,hikaku);
        break;
      }
      find = true;
    }
  }

  console.log(D);
});
