#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
ostream &operator<<(ostream &os, const pair<T, U> &r) {
  os << "(" << r.first << "," << r.second << ")";
  return os;
}
inline int nxt() {
  int first;
  scanf("%d", &first);
  return first;
}
long long gcd(long long a, long long b) {
  while (b > 0) {
    a %= b;
    swap(a, b);
  }
  return a;
}
template <typename T>
T sqr(T a) {
  return a * a;
}
struct Node {
  int win, lose;
  int nxt[26];
};
const int N = 100000;
Node st[N + 1];
int sz;
void clear(int v) {
  memset(st[v].nxt, 255, sizeof(st[v].nxt));
  st[v].win = -1;
  st[v].lose = -1;
}
void init() {
  clear(0);
  sz = 1;
}
void add(const string &s) {
  int v = 0;
  for (char cha : s) {
    int c = cha - 'a';
    if (st[v].nxt[c] == -1) {
      clear(sz);
      st[v].nxt[c] = sz++;
    }
    v = st[v].nxt[c];
  }
}
void calc(int v) {
  if (st[v].win != -1) return;
  st[v].win = 0;
  st[v].lose = 0;
  int cnt = 0;
  for (int i = 0; i < 26; ++i) {
    int to = st[v].nxt[i];
    if (to != -1) {
      calc(to);
      ++cnt;
      st[v].win |= !st[to].win;
      st[v].lose |= !st[to].lose;
    }
  }
  if (cnt == 0) {
    st[v].win = 0;
    st[v].lose = 1;
  }
}
void solve() {
  int n, k;
  cin >> n >> k;
  init();
  for (int i = 0; i < n; ++i) {
    string s;
    cin >> s;
    add(s);
  }
  calc(0);
  if (!st[0].win) {
    cout << "Second\n";
    return;
  }
  if (st[0].win && st[0].lose) {
    cout << "First\n";
    return;
  }
  if (k & 1) {
    cout << "First\n";
  } else {
    cout << "Second\n";
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  solve();
  return 0;
}
