Problem: We often go to supermarkets to buy some fruits or vegetables, and on the tag there prints the price for a kilo. But in some supermarkets, when asked how much the items are, the clerk will say that a yuan for b kilos (You don't need to care about what "yuan" is), the same as a/b yuan for a kilo.

Now imagine you'd like to buy m kilos of apples. You've asked n supermarkets and got the prices. Find the minimum cost for those apples.

You can assume that there are enough apples in all supermarkets.

Input

The first line contains two positive integers n and m (1 ≤ n ≤ 5 000, 1 ≤ m ≤ 100), denoting that there are n supermarkets and you want to buy m kilos of apples.

The following n lines describe the information of the supermarkets. Each line contains two positive integers a, b (1 ≤ a, b ≤ 100), denoting that in this supermarket, you are supposed to pay a yuan for b kilos of apples.

Output

The only line, denoting the minimum cost for m kilos of apples. Please make sure that the absolute or relative error between your answer and the correct answer won't exceed 10^{-6}.

Formally, let your answer be x, and the jury's answer be y. Your answer is considered correct if \frac{|x - y|}{max{(1, |y|)}} ≤ 10^{-6}.

Examples

Input

3 5
1 2
3 4
1 3


Output

1.66666667


Input

2 1
99 100
98 99


Output

0.98989899

Note

In the first sample, you are supposed to buy 5 kilos of apples in supermarket 3. The cost is 5/3 yuan.

In the second sample, you are supposed to buy 1 kilo of apples in supermarket 2. The cost is 98/99 yuan.

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
string easyOrHard(int n, vector<char> a) {
  int result = a[0] - '0';
  if (result > 0) return "HARD";
  for (int i = 1; i < n; ++i) {
    result += a[i] - '0';
    if (result > 0) return "HARD";
  }
  return "EASY";
}
int howManyYears(int a, int b) {
  int i = 0;
  while (true) {
    if (a > b)
      break;
    else {
      a *= 3;
      b *= 2;
      ++i;
    }
  }
  return i;
}
void beautyMatrix() {
  int rowCount = 0;
  int columnCount = 0;
  vector<vector<int>> beauty(5, vector<int>(5));
  for (int i = 0; i < 5; ++i) {
    for (int j = 0; j < 5; ++j) {
      int cell;
      cin >> cell;
      if (cell) {
      }
      beauty[i][j] = cell;
    }
  }
  bool rowBreak = false;
  rowCount = 0;
  for (; rowCount < 5;) {
    columnCount = 0;
    for (; columnCount < 5;) {
      if (beauty[rowCount][columnCount] == 1) {
        rowBreak = true;
        break;
      } else {
        columnCount++;
      }
    }
    if (rowBreak) {
      break;
    }
    rowCount++;
  }
  cout << "rowCount = " << rowCount << endl;
  cout << "columnCount = " << columnCount << endl;
  int distance = 0;
  distance += abs(rowCount - 2);
  distance += abs(columnCount - 2);
  cout << distance << endl;
}
void wayTooLongWords() {
  int n;
  cin >> n;
  vector<string> s;
  for (int i = 0; i < n; ++i) {
    string aLine;
    cin >> aLine;
    s.push_back(aLine);
  }
  for (auto each : s) {
    if (each.size() > 10) {
      int trimedSize = each.size() - 2;
      string trimedSizeString = to_string(trimedSize);
      string resultString;
      resultString.push_back(each.front());
      resultString += trimedSizeString;
      resultString.push_back(each.back());
      cout << resultString << endl;
    } else {
      cout << each << endl;
    }
  }
}
void PetyaAndStrings() {
  string A;
  cin >> A;
  string B;
  cin >> B;
  transform(A.begin(), A.end(), A.begin(), ::toupper);
  transform(B.begin(), B.end(), B.begin(), ::toupper);
  if (A < B) cout << "-1" << endl;
  if (A > B) cout << "1" << endl;
  if (A == B) cout << "0" << endl;
}
void Right_LeftCipher() {
  string inputString;
  cin >> inputString;
  int n = inputString.size();
  string resultString;
  int center = (n - 1) / 2;
  resultString.push_back(inputString[center]);
  for (int step = 1; step <= n / 2; ++step) {
    if (center + step < n) {
      resultString.push_back(inputString[center + step]);
    }
    if (center - step >= 0) {
      resultString.push_back(inputString[center - step]);
    }
  }
  cout << resultString;
}
void FriendsMeeting() {
  int left, right, distance;
  cin >> left;
  cin >> right;
  distance = abs(right - left);
  if (distance == 0) {
    cout << 0 << endl;
    return;
  }
  int steps = 0;
  int answer = 0;
  while (distance > 1) {
    steps++;
    answer += steps * 2;
    distance -= 2;
  }
  answer += (steps + 1) * distance;
  cout << answer;
}
void Triangularnumbers() {
  int given;
  cin >> given;
  int doubleGiven = 2 * given;
  int floor = sqrt(doubleGiven);
  int result = floor * (floor + 1) / 2;
  if (result == given) {
    cout << "YES" << endl;
  } else {
    cout << "NO" << endl;
  }
}
void DefiniteGame() {
  int a;
  cin >> a;
  if (a != 2) {
    cout << 1;
  } else {
    cout << 2;
  }
}
void HelpfulMaths() {
  string given;
  cin >> given;
  map<int, int> counter;
  for (auto each : given) {
    if (each == '+') {
      counter['+' - '0']++;
    } else if (each == '1') {
      counter['1' - '0']++;
    } else if (each == '2') {
      counter['2' - '0']++;
    } else if (each == '3') {
      counter['3' - '0']++;
    }
  }
  while (counter['+' - '0'] > 0 || counter['1' - '0'] > 0 ||
         counter['2' - '0'] > 0 || counter['3' - '0'] > 0) {
    if (counter['1' - '0'] > 0) {
      cout << 1;
      counter['1' - '0']--;
      if (counter['+' - '0'] > 0) {
        cout << '+';
        counter['+' - '0']--;
      }
      continue;
    }
    if (counter['2' - '0'] > 0) {
      cout << 2;
      counter['2' - '0']--;
      if (counter['+' - '0'] > 0) {
        cout << '+';
        counter['+' - '0']--;
      }
      continue;
    }
    if (counter['3' - '0'] > 0) {
      cout << 3;
      counter['3' - '0']--;
      if (counter['+' - '0'] > 0) {
        cout << '+';
        counter['+' - '0']--;
      }
      continue;
    }
  }
}
void GravityFlip() {
  int n;
  cin >> n;
  vector<int> s;
  for (int i = 0; i < n; ++i) {
    int element;
    cin >> element;
    s.push_back(element);
  }
  sort(s.begin(), s.end());
  for (int i = 0; i < n; ++i) {
    cout << s[i] << " ";
  }
}
int sum_sums_prefixSums(vector<int> a) {
  int n = a.size();
  int answer = 0;
  for (int L = 0; L <= n; L++) {
    vector<int> prefixSums;
    prefixSums.push_back(0);
    for (int R = L; R < n; R++) {
      prefixSums.push_back(prefixSums.back() + a[R]);
      answer += prefixSums.back();
    }
  }
  return answer;
}
int sum_sums(vector<int> a) {
  int n = a.size();
  int answer = 0;
  for (int L = 0; L < n; L++) {
    for (int R = L; R < n; R++) {
      int sum = 0;
      for (int i = L; i <= R; ++i) {
        sum += a[i];
      }
      answer += sum;
    }
  }
  return answer;
}
void KefaandFirstSteps() {
  int n;
  cin >> n;
  vector<int> s;
  for (int i = 0; i < n; ++i) {
    int ele;
    cin >> ele;
    s.push_back(ele);
  }
  int longestCounter = 1;
  for (int L = 0; L < n; ++L) {
    int eachCounter = 1;
    for (int R = L + 1; R < n; ++R) {
      if (s[R] >= s[R - 1]) {
        eachCounter++;
      } else {
        break;
      }
    }
    longestCounter = max(longestCounter, eachCounter);
  }
  cout << longestCounter;
}
void EvenOdds() {
  long long n, k;
  vector<string> s;
  for (long long i = 0; i < 2; ++i) {
    string aLine;
    cin >> aLine;
    s.push_back(aLine);
  }
  n = stoll(s[0]);
  k = stoll(s[1]);
  bool isEven = (n % 2 == 0);
  bool startFromLeft = false;
  long long stepEnding = 0;
  long long answer = 0;
  if ((isEven && k <= n / 2) || (!isEven && k <= n / 2 + 1)) {
    startFromLeft = true;
    answer = 1;
  } else {
    startFromLeft = false;
    answer = 2;
  }
  if (startFromLeft && !isEven) {
    stepEnding = k - 1;
  } else if (startFromLeft && isEven) {
    stepEnding = k - 1;
  } else if (!startFromLeft && isEven) {
    stepEnding = k - n / 2 - 1;
  } else if (!startFromLeft && !isEven) {
    stepEnding = k - n / 2 - 2;
  }
  answer += 2 * (stepEnding);
  cout << answer << endl;
}
void IWannaBetheGuy() {
  int totalLevelCount, Xposition, Yposition;
  vector<int> firstLine, secondLine;
  cin >> totalLevelCount;
  int firstLevelCount;
  cin >> firstLevelCount;
  while (firstLevelCount > firstLine.size()) {
    int element;
    cin >> element;
    firstLine.push_back(element);
  }
  int secondLevelCount;
  cin >> secondLevelCount;
  while (secondLevelCount > secondLine.size()) {
    int element;
    cin >> element;
    secondLine.push_back(element);
  }
  map<int, bool> allLevelMap;
  for (auto each : firstLine) {
    allLevelMap[each] = true;
  }
  for (auto each : secondLine) {
    allLevelMap[each] = true;
  }
  if (allLevelMap.size() == totalLevelCount) {
    cout << "I become the guy.";
  } else {
    cout << "Oh, my keyboard!";
  }
}
enum direction {
  upward,
  downward,
  leftward,
  rightward,
  leftup,
  leftdown,
  rightup,
  rightdown
};
bool isMoveInsideBoard(int boardLength, pair<int, int> king, direction direct) {
  int limit = boardLength - 1;
  if (direct == upward) {
    return king.second - 1 >= 0;
  }
  if (direct == downward) {
    return king.second + 1 <= limit;
  }
  if (direct == leftward) {
    return king.first - 1 >= 0;
  }
  if (direct == rightward) {
    return king.first + 1 <= limit;
  }
  if (direct == leftup) {
    return king.first - 1 >= 0 && king.second - 1 >= 0;
  }
  if (direct == leftdown) {
    return king.first - 1 >= 0 && king.second + 1 <= limit;
  }
  if (direct == rightup) {
    return king.first + 1 < limit && king.second - 1 >= 0;
  }
  if (direct == rightdown) {
    return king.first + 1 < limit && king.second + 1 < limit;
  }
}
bool isMoveSafe(int boardLength, pair<int, int> queen, pair<int, int> king,
                direction direct) {
  bool columnSafe, rowSafe, one_three_Safe, two_four_Safe = false;
  columnSafe = queen.first != king.first;
  rowSafe = queen.second != king.second;
  for (int steps = 1; steps <= boardLength - 1; ++steps) {
    if (!(king.first == queen.first - steps &&
          king.second == queen.second + steps) &&
        !(king.first == queen.first + steps &&
          king.second == queen.second - steps)) {
      one_three_Safe = true;
    }
    if (!(king.first == queen.first - steps &&
          king.second == queen.second - steps) &&
        !(king.first == queen.first + steps &&
          king.second == queen.second + steps)) {
      two_four_Safe = true;
    }
  }
  return columnSafe && rowSafe && one_three_Safe && two_four_Safe;
}
bool dfsKingEscape(vector<vector<bool>> board, pair<int, int> queen,
                   pair<int, int> king, pair<int, int> target) {
  if (king.first == target.first && king.second == target.second) {
    return true;
  }
  return false;
}
void KingEscape() {
  int boardLength;
  cin >> boardLength;
  pair<int, int> queenPosition;
  cin >> queenPosition.first >> queenPosition.second;
  pair<int, int> kingPosition;
  cin >> kingPosition.first >> kingPosition.second;
  pair<int, int> targetPosition;
  cin >> targetPosition.first >> targetPosition.second;
  cout << " pause and check " << endl;
  vector<vector<bool>> board(boardLength, vector<bool>(false));
  if (dfsKingEscape(board, queenPosition, kingPosition, targetPosition)) {
    cout << "YES";
  } else {
    cout << "NO";
  }
}
bool is_lucky(int x) {
  while (x > 0) {
    if (!(x % 10 == 4 || x % 10 == 7)) {
      return false;
    }
    x /= 10;
  }
  return true;
}
bool is_almost_lucky(int n) {
  for (int b = 1; b <= n; b++) {
    if (n % b == 0) {
      if ((is_lucky(b))) {
        return true;
      }
    }
  }
  return false;
}
void StringTask() {
  string given, answer;
  cin >> given;
  int n = given.size();
  for (int i = 0; i < n; ++i) {
    if (given[i] == 'A' || given[i] == 'a' || given[i] == 'O' ||
        given[i] == 'o' || given[i] == 'Y' || given[i] == 'y' ||
        given[i] == 'E' || given[i] == 'e' || given[i] == 'U' ||
        given[i] == 'u' || given[i] == 'I' || given[i] == 'i') {
    } else {
      answer.push_back('.');
      answer.push_back(tolower(given[i]));
    }
  }
  cout << answer;
}
int binarySearch_HitAndMiss2(vector<long long> given, long long l, long long h,
                             long long t) {
  if (h > given.size()) {
    h = given.size() - 1;
  }
  l = l >= 0 ? l : 0;
  int m = l + (h - l) / 2;
  int p = 0;
  if (t < given[l]) return p;
  while (true) {
    if (m == l && t < given[h]) {
      p = l + 1;
      break;
    }
    if (m == l && t >= given[h]) {
      p = h + 1;
      break;
    }
    if (m > l) {
      if (given[m] == t) {
        while (given[m + 1] == given[m]) {
          ++m;
        }
        p = m + 1;
        break;
      } else if (given[m] > t) {
        h = m;
        m = l + (h - l) / 2;
      } else if (given[m] < t) {
        l = m;
        m = l + (h - l) / 2;
      }
    }
  }
  return p;
}
void Interestingdrink() {
  long long shopTotal;
  cin >> shopTotal;
  vector<long long> shopPrices;
  for (long long i = 0; i < shopTotal; ++i) {
    long long single;
    cin >> single;
    shopPrices.push_back(single);
  }
  long long dayTotal;
  cin >> dayTotal;
  vector<long long> budgets;
  for (long long i = 0; i < dayTotal; ++i) {
    int single;
    cin >> single;
    budgets.push_back(single);
  }
  vector<long long> shopPrices2;
  shopPrices2 = shopPrices;
  sort(shopPrices2.begin(), shopPrices2.end());
  vector<long long> answers1;
  for (long long i = 0; i < dayTotal; ++i) {
    long long target = budgets[i];
    if (target < shopPrices2[0]) {
      answers1.push_back(0);
    } else if (target >= shopPrices2.back()) {
      answers1.push_back(shopPrices2.size());
    } else {
      int result = binarySearch_HitAndMiss2(shopPrices2, 0,
                                            shopPrices2.size() - 1, target);
      answers1.push_back(result);
    }
  }
  for (long long k = 0; k < answers1.size(); ++k) {
    cout << answers1[k] << endl;
  }
}
void BitPlusPlus() {
  int n;
  cin >> n;
  vector<string> given;
  int mmCounter = 0;
  int ppCounter = 0;
  for (int i = 0; i < n; ++i) {
    string aLine;
    cin >> aLine;
    given.push_back(aLine);
    size_t foundPP = aLine.find("++");
    size_t foundMM = aLine.find("--");
    if (foundMM != std::string::npos) {
      mmCounter++;
    }
    if (foundPP != std::string::npos) {
      ppCounter++;
    }
  }
  int answer = ppCounter - mmCounter;
  cout << answer;
}
void BeautifulYear() {
  int given;
  cin >> given;
  while (given <= 9999) {
    ++given;
    vector<int> digits;
    int givenClone = given;
    while (givenClone > 0) {
      int digit = givenClone % 10;
      digits.push_back(digit);
      givenClone /= 10;
    }
    set<int> counter;
    for (auto each : digits) {
      counter.insert(each);
    }
    if (counter.size() == 4) {
      cout << given;
      return;
    }
  }
}
void Supermarket() {
  int totalMarkets;
  int totalApple;
  cin >> totalMarkets >> totalApple;
  vector<pair<int, int>> prices;
  for (int i = 0; i < totalMarkets; ++i) {
    int marketID, priceTag;
    cin >> marketID >> priceTag;
    pair<int, int> price(marketID, priceTag);
    prices.push_back(price);
  }
  long double minUnitPrice = (long double)INT_MAX;
  int minIndex;
  for (int i = 0; i < prices.size(); ++i) {
    long double temp =
        (long double)(prices[i].first) / (long double)(prices[i].second);
    if (temp <= minUnitPrice) {
      minIndex = i;
      minUnitPrice = temp;
    }
  }
  minUnitPrice =
      (long double)(totalApple * (long double)(prices[minIndex].first) /
                    (long double)(prices[minIndex].second));
  cout << setprecision(8) << minUnitPrice << endl;
}
int main() {
  Supermarket();
  return 0;
}
int find_position_of_last_not_exceeding(vector<int> a, int target) {
  int l = 0;
  int h = a.size() - 1;
  int answer = -1;
  while (l <= h) {
    int m = l + (h - l) / 2;
    if (a[m] <= target) {
      answer = m;
      l = m + 1;
    } else if (a[m] > target) {
      h = m - 1;
    }
  }
  return answer;
}
void Interestingdrink2() {
  int shopTotal;
  cin >> shopTotal;
  vector<int> shopPrices;
  for (int i = 0; i < shopTotal; ++i) {
    int single;
    cin >> single;
    shopPrices.push_back(single);
  }
  sort(shopPrices.begin(), shopPrices.end());
  int dayTotal;
  cin >> dayTotal;
  for (int i = 0; i < dayTotal; ++i) {
    int target;
    cin >> target;
    cout << 1 + find_position_of_last_not_exceeding(shopPrices, target) << "\n";
  }
}
int main3() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  Interestingdrink2();
  return 0;
}
void StringTask2() {
  string given, answer;
  cin >> given;
  int n = given.size();
  for (int i = 0; i < n; ++i) {
    string vowels = "aoyeui";
    bool flag = false;
    for (auto each : vowels) {
      if (each == tolower(given[i])) {
        flag = true;
      }
    }
    if (!flag) {
      cout << "." << (char)tolower(given[i]);
    }
  }
}
int main4() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  StringTask2();
  return 0;
}